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 };
Mamba never out

浙公网安备 33010602011771号