您的位置:首页 > 其它

Leetcode 106. Construct Binary Tree from Inorder and Postorder Traversal

2018-02-08 09:12 387 查看
原题:
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, giveninorder = [9,3,15,20,7]
postorder = [9,15,7,20,3]Return the following binary tree: 3
/ \
9 20
/ \
15 7


解决方法:


- 后序遍历的最后一个节点是根节点。
- 根据根节点把中序遍历的点分成左右两部分。
- 根据中序遍历左右部分的长度将后序遍历也分割成左右两部分。
这样递归循环即可求出最后的树。

代码:
TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder, int in_start, int in_end, int post_start, int post_end) {
if (post_end < post_start)
return NULL;

TreeNode* root = new TreeNode(postorder[post_end]);
int pos;
for(int i = in_start; i <= in_end;i++){
if (inorder[i] == postorder[post_end]){
pos = i;
break;
}
}

root->left = buildTree(inorder, postorder, in_start, pos -1, post_start, post_start + pos - in_start - 1);
root->right = buildTree(inorder, postorder, pos + 1, in_end, post_start + pos - in_start , post_end-1);
return root;
}

TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) {
return buildTree(inorder, postorder, 0, inorder.size() -1, 0, postorder.size() -1);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  cplusplus Leetcode
相关文章推荐