您的位置:首页 > 编程语言 > Go语言

[LeetCode] Construct Binary Tree from Inorder and Postorder Traversal

2013-11-20 09:09 459 查看
Given inorder and postorder traversal of a tree, construct the binary tree.

Note:

You may assume that duplicates do not exist in the tree.

问题描述:给定一个二叉树的中序遍历和后序遍历序列,构建这个二叉树。

同前面的从先序和中序构建二叉树类似。

class Solution {
public:
typedef vector<int>::iterator bt_iter;

TreeNode *build(bt_iter in_beg, bt_iter in_end, bt_iter post_beg, bt_iter post_end)
{
if(in_beg == in_end)
return NULL;

int root_val = *(post_end-1);
bt_iter rt_it = find(in_beg, in_end, root_val);
bt_iter left_end = post_beg + (rt_it - in_beg);

TreeNode *child_root = new TreeNode(root_val);
child_root->left = build(in_beg, rt_it, post_beg, left_end);
child_root->right = build(rt_it + 1, in_end, left_end, post_end - 1);

return child_root;
}

TreeNode *buildTree(vector<int> &inorder, vector<int> &postorder) {
// IMPORTANT: Please reset any member data you declared, as
// the same Solution instance will be reused for each test case.
return build(inorder.begin(), inorder.end(), postorder.begin(), postorder.end());
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  algorithm leetcode
相关文章推荐