# 19.3.5 [LeetCode 106] Construct Binary Tree from Inorder and Postorder Traversal

Given inorder and postorder traversal of a tree, construct the binary tree.

Note:
You may assume that duplicates do not exist in the tree.

For example, given

inorder = [9,3,15,20,7]
postorder = [9,15,7,20,3]

Return the following binary tree:

3
/ \
9  20
/  \
15   7
1 class Solution {
2 public:
3     TreeNode*buildchild(vector<int>& postorder, vector<int>& inorder,int p1,int p2, int i1, int i2) {
4         if (i2 < i1)
5             return NULL;
6         int nowroot = postorder[p2];
7         TreeNode*ans = new TreeNode(nowroot);
8         for (int i = i1; i <= i2; i++)
9             if (inorder[i] == nowroot) {
10                 int left = i - i1, right = i2 - i;
11                 if (i != i1)
12                     ans->left = buildchild(postorder, inorder,p1,p1+left-1, i1, i - 1);
13                 if (i != i2)
14                     ans->right = buildchild(postorder, inorder, p1 + left, p2 - 1, i + 1, i2);
15             }
16         return ans;
17     }
18     TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) {
19         return buildchild(postorder, inorder, 0,postorder.size()-1,0, inorder.size() - 1);
20     }
21 };
View Code

posted @ 2019-03-05 11:22  TobicYAL  阅读(281)  评论(0编辑  收藏  举报