</pre><p>1.由前序遍历和中序遍历构造二叉树</p><p><pre name="code" class="cpp">/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) { return build(preorder,inorder,0,0,inorder.size()-1); } TreeNode* build(vector<int>& preorder, vector<int>& inorder,int pstart,int start,int end) { if(start>end) return NULL; TreeNode* root=new TreeNode(preorder[pstart]); int k; for(int i=start;i<=end;i++ ) { if(inorder[i]==root->val){ k=i; break; } } root->left=build(preorder,inorder,pstart+1,start,k-1); root->right=build(preorder,inorder,pstart+k+1-start,k+1,end); return root; } };
2.由中序遍历和后序遍历构造二叉树
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) { return build(inorder,postorder,postorder.size()-1,0,inorder.size()-1); } TreeNode* build(vector<int>& inorder, vector<int>& postorder,int pstart,int start,int end) { if(start>end) return NULL; TreeNode* root= new TreeNode(postorder[pstart]); int k; for(int i=start;i<=end;i++) { if(inorder[i]==root->val) { k=i; break; } } root->left=build(inorder,postorder,pstart+k-end-1,start,k-1);//这个地方的pstart很难确定 root->right=build(inorder,postorder,pstart-1,k+1,end); return root; } };