题目:
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 a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
void CreateTree(vector<int>& preorder, vector<int>& inorder, TreeNode *&root, int &pre_i, int start_in, int end_in){
if(start_in == end_in || pre_i >= inorder.size())return;
root = new TreeNode;
root->val = preorder[pre_i];
int temp;
for(int i = start_in; i< end_in; i++)
if(preorder[pre_i] == inorder[i]){
temp = i;break;
}
pre_i++;
CreateTree(preorder, inorder, root->left, pre_i, start_in, temp);
CreateTree(preorder, inorder, root->right, pre_i, temp+1, end_in);
}
TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
if(preorder.size() < 1)return nullptr;
TreeNode *root;
int pre_i = 0;
CreateTree(preorder, inorder, root, pre_i, 0, inorder.size());
return root;
}
};