/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
TreeNode *buildTree(vector<int> &inorder, vector<int> &postorder)
{
TreeNode *root;
root = (TreeNode*)malloc(sizeof(TreeNode));
if (inorder.empty() || postorder.empty())
return NULL;
else
root = rebuild(postorder, 0, postorder.size() - 1, inorder, 0, inorder.size() - 1);
return root;
}
TreeNode *rebuild(vector<int> &postorder,int pbegin,int pend,vector<int> &inorder,int ibegin,int iend)
{
int root,index,i;
if (postorder.empty() || inorder.empty() || pbegin > pend || ibegin > iend)
return NULL;
root = postorder[pend];
for (i = ibegin; i <= iend; i++)
{
if (root == inorder[i])
{
index = i;
break;
}
}
int len = index - ibegin;
TreeNode *left = rebuild(postorder,pbegin,pbegin+len-1,inorder,ibegin,index-1);
TreeNode *right = rebuild(postorder,pbegin+len,pend-1,inorder,index+1,iend);
TreeNode *node = new TreeNode(root);
node->left = left;
node->right = right;
return node;
}
};
【LeetCode】Construct Binary Tree from Inorder and Postorder Traversal
最新推荐文章于 2022-01-01 11:35:53 发布