/**
* Definition of TreeNode:
* class TreeNode {
* public:
* int val;
* TreeNode *left, *right;
* TreeNode(int val) {
* this->val = val;
* this->left = this->right = NULL;
* }
* }
*/
class Solution {
/**
*@param inorder : A list of integers that inorder traversal of a tree
*@param postorder : A list of integers that postorder traversal of a tree
*@return : Root of a tree
*/
public:
TreeNode *buildTree(vector<int> &inorder, vector<int> &postorder) {
// write your code here
int n=inorder.size();if(n==0) return NULL;
return helper(inorder,0,n-1,postorder,0,n-1);
}
TreeNode *helper(vector<int> &inorder,int l1,int r1, vector<int> &postorder,int l2,int r2){
if(l1>r1||l2>r2) return NULL;
int i;
for(i=l1;i<=r1;i++){
if(inorder[i]==postorder[r2]) break;
}
TreeNode *root=new TreeNode(postorder[r2]);
root->right=helper(inorder,i+1,r1,postorder,r2-r1+i,r2-1);
root->left=helper(inorder,l1,i-1,postorder,l2,r2-r1+i-1);
return root;
}
};
由中序遍历和后序遍历构造二叉树
最新推荐文章于 2022-06-23 01:04:33 发布