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     }

 

posted @ 2015-06-20 15:21  Rosanne  阅读(173)  评论(0编辑  收藏  举报