Construct Binary Tree from Inorder and Postorder Traversal
Description:
Given inorder and postorder traversal of a tree, construct the binary tree.
Note:
You may assume that duplicates do not exist in the tree.
Code:
1 TreeNode * buildTree(vector<int>& inorder, int inBegin, int inEnd, vector<int>& postorder, int postBegin, int postEnd) 2 { 3 TreeNode*root =NULL; 4 5 if (postEnd >= postBegin) 6 { 7 root = new TreeNode(postorder[postEnd]); 8 9 int rootIndex = 0; 10 for (int i = inBegin; i <= inEnd; ++i) 11 { 12 if (inorder[i] == postorder[postEnd]) 13 { 14 rootIndex = i; 15 break; 16 } 17 } 18 19 if (rootIndex!=inBegin) 20 { 21 root->left = buildTree( inorder, inBegin, rootIndex-1, postorder, postBegin, postBegin+(rootIndex-inBegin)-1); 22 } 23 if (rootIndex!=inEnd) 24 { 25 root->right = buildTree(inorder, rootIndex+1, inEnd, postorder, postBegin+(rootIndex-inBegin), postEnd-1); 26 } 27 } 28 return root; 29 } 30 TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) { 31 return buildTree(inorder, 0, inorder.size()-1, postorder, 0, postorder.size()-1); 32 }