您的位置:首页 > 其它

leetcode 105. Construct Binary Tree from Preorder and Inorder Traversal

2015-02-18 10:54 465 查看
Given preorder and inorder traversal of a tree, construct the binary tree.

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

[Solution]

先序定根,根据先序的根,中序定左右。然后递归。

TreeNode *buildTree(vector<int> &preorder, vector<int> &inorder)
{
if (preorder.size() == 0)
return NULL;
return buildTreePI(preorder, 0, preorder.size() - 1, inorder, 0, inorder.size() - 1);
}

TreeNode *buildTreePI(vector<int> &preorder, int preStart, int preEnd, vector<int> &inorder, int inStart, int inEnd)
{
TreeNode *root = new TreeNode(preorder[preStart]);
int left = 0;
if (preStart == preEnd)
return root;

while (inorder[left + inStart] != preorder[preStart])
left++;

if (left > 0)
root->left = buildTreePI(preorder, preStart + 1, preStart + left, inorder, inStart, inStart + left - 1);
if (inStart + left < inEnd)
root->right = buildTreePI(preorder, preStart + left + 1, preEnd, inorder, inStart + left + 1, inEnd);
return root;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐