Given two integer arrays preorder and inorder where preorder is the preorder traversal of a binary tree and inorder is the inorder traversal of the same tree, construct and return the binary tree.
給兩個整數數列前序和中序,分別是對同一棵二元樹的前序遍歷和中序遍歷,請根據前序和中序建立並回傳這棵二元樹。
Example 1:
Input: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]
Output: [3,9,20,null,null,15,7]
Example 2:
Input: preorder = [-1], inorder = [-1]
Output: [-1]
/**
* 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:
TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
TreeNode* node = new TreeNode();
node = buildSubTree(preorder, inorder);
return node;
}
TreeNode* buildSubTree(vector<int>& preorder, vector<int>& inorder) {
std::vector<int>::iterator it;
it = find(inorder.begin(), inorder.end(), preorder.front());
if(it == inorder.end())
return NULL;
TreeNode* node = new TreeNode();
vector<int> leftInorder(inorder.begin(), it);
vector<int> rightInorder(it + 1, inorder.end());
node->val = preorder.front();
preorder.erase(preorder.begin());
node->left = buildSubTree(preorder, leftInorder);
node->right = buildSubTree(preorder, rightInorder);
return node;
}
};
LeetCode
C++