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     }

 

你可能感兴趣的:(binary)