106. 从中序与后序遍历序列构造二叉树

 1 /**
 2  * Definition for a binary tree node.
 3  * struct TreeNode {
 4  *     int val;
 5  *     TreeNode *left;
 6  *     TreeNode *right;
 7  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 8  * };
 9  */
10 class Solution 
11 {
12 public:
13     TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) 
14     {
15         int n = inorder.size();
16         if(n == 0) return NULL;
17         return build(inorder,0,n - 1,postorder,0,n - 1);
18     }
19 
20     TreeNode* build(vector<int>& inorder,int ib,int ie,vector<int>& postorder, int pb,int pe)
21     {
22         int val = postorder[pe];
23         TreeNode* root = new TreeNode(val);
24 
25         int i = ib;
26         for(;i <= ie;i ++) if(inorder[i] == val) break;
27 
28         //有左子树就是i不能为ib
29         if(i != ib) root->left = build(inorder,ib,i - 1,postorder,pb,i - ib - 1 + pb);
30         else root->left = 0;
31         
32         //有右子树就是i不能为ie
33         if(i != ie) root->right= build(inorder,i + 1,ie,postorder,i - ib + pb,pe - 1);
34         else root->right = 0;
35         return root;
36     }
37 };

 

posted @ 2020-04-01 13:20  Jinxiaobo0509  阅读(128)  评论(0)    收藏  举报