#include <iostream>
#include<queue>
#include<vector>
using namespace std;
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
TreeNode*constructtree(vector<int>&pre,vector<int>&in){
int size=pre.size();
if(size==0){
return NULL;
}
vector<int>leftpre,leftin,rightpre,rightin;
TreeNode*root=new TreeNode(pre[0]);
int mark;
for(int i=0;i<size;i++){
if(pre[0]==in[i]){
mark=i;
}
}
for(int i=0;i<mark;i++){
leftpre.push_back(pre[i+1]);
leftin.push_back(in[i]);
}
for(int i=mark+1;i<size;i++){
rightpre.push_back(pre[i]);
rightin.push_back(in[i]);
}
root->left=constructtree(leftpre,leftin);
root->right=constructtree(rightpre,rightin);
return root;
}
vector<int>levelorder(TreeNode*root){
vector<int>data;
queue<TreeNode*>que;
if(root==NULL){
return data;
}
que.push(root);
while(!que.empty()){
TreeNode*temp=que.front();
data.push_back(temp->val);
que.pop();
if(temp->left!=NULL){
que.push(temp->left);
}
if(temp->right!=NULL){
que.push(temp->right);
}
}
return data;
}
int main()
{
vector<int>inorder;
for(int i=1;i<4;i++){
inorder.push_back(i);
}
vector<int>preorder;
preorder.push_back(2);
preorder.push_back(1);
preorder.push_back(3);
TreeNode*root=constructtree(preorder,inorder);
vector<int>data=levelorder(root);
for(int i=0;i<data.size();i++){
cout<<data[i]<<endl;
}
return 0;
}
前序中序建立二叉树 并且层次输出(可执行代码)
最新推荐文章于 2021-05-18 10:31:01 发布