Given preorder and inorder traversal of a tree, construct the binary tree.
Note:
You may assume that duplicates do not exist in the tree.
给定先序序列和中序序列建立二叉树, 递归解决, 按顺序扫描先序序列,每一次扫描的第一个节点作为根,然后在中序序列中找到根,中序左边部分作为做子树,
/**
* 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> &preorder, vector<int> &inorder) {
if (preorder.empty() || inorder.empty()) return NULL;
TreeNode *root = new TreeNode(preorder[0]);
vector<int>::iterator it;
for (it = inorder.begin(); it != inorder.end(); ++it)
{
if (*it == preorder[0])
break;
}
// 删除先序中建立完的根节点
preorder.erase(preorder.begin());
vector<int> left, right;
//构建做右子树的中序序列
left.insert(left.begin(), inorder.begin(), it);
right.insert(right.begin(), it + 1, inorder.end());
//递归建立左右子树
root->left = buildTree(preorder, left);
root->right = buildTree(preorder, right);
return root;
}
};