Given preorder and inorder traversal of a tree, construct the binary tree.
Note:
You may assume that duplicates do not exist in the tree.
思路:根据前序和中序的特点 递归调用创建二叉树
#include <iostream> #include <vector> using namespace std; /** 由一个树的前序和中序列来构造树 */ typedef struct tree_node Tree; struct tree_node { Tree* left; Tree* right; int value; }; Tree* helper(vector<int>& pre,int pre_begin,int pre_end,vector<int>& inorder,int in_begin,int in_end) { Tree* root=NULL; int mid; int i; if(pre_end -pre_begin < 0) { return NULL; } else { for(i=in_begin;i<=in_end;i++) if(inorder[i] == pre[pre_begin]) break; if(i>in_end) return NULL; root = new Tree; root->value = pre[pre_begin]; root->left = helper(pre,pre_begin+1,pre_begin+1+i-1-in_begin,inorder,in_begin,i-1); root->right = helper(pre,pre_begin+1+i-1-in_begin+1,pre_end,inorder,i+1,in_end); return root; } } Tree* createBintree(vector<int>& pre,vector<int>& inorder) { if(pre.size()==0 || inorder.size()==0) return NULL; return helper(pre,0,pre.size()-1,inorder,0,inorder.size()-1); } /*前序遍历*/ void print_pre(Tree* tree) { if(tree != NULL) { cout<<tree->value<<" "<<endl; print_pre(tree->left); print_pre(tree->right); } } /*中序遍历*/ void print_inorder(Tree* tree) { if(tree != NULL) { print_inorder(tree->left); cout<<tree->value<<endl; print_inorder(tree->right); } } void print_post(Tree* root) { if(root != NULL) { print_post(root->left); print_post(root->right); cout<<root->value<<endl; } } int main() { int array[]={1,2,3,4,5,6,7,8}; vector<int> inorder(array,array+sizeof(array)/sizeof(int)); int array1[] ={4,2,1,3,7,6,5,8}; vector<int> preorder(array1,array1+sizeof(array1)/sizeof(int)); int array2[]={1,3,2,5,6,8,7,4}; vector<int> postorder(array2,array2+sizeof(array2)/sizeof(int)); Tree* root = createBintree(preorder,inorder); print_inorder(root); cout<<"============="<<endl; print_pre(root); cout<<endl; cout<<"============="<<endl; //Tree* second = createBinTree(inorder,postorder); print_post(second); return 0; }
Construct binary tree from preorder and inoder--LeetCode
原文地址:http://blog.csdn.net/yusiguyuan/article/details/44746867