题解 | #从前序和中序遍历构造二叉树#和上一题差不多
从前序和中序遍历构造二叉树
https://www.nowcoder.com/practice/0ee054a8767c4a6c96ddab65e08688f4
/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
class Solution {
public:
/**
*
* @param preorder int整型vector
* @param inorder int整型vector
* @return TreeNode类
*/
TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
if (preorder.size() == 0) return nullptr;
int rootvalue = preorder[0];
TreeNode* root = new TreeNode(rootvalue);
int temp;
for (temp = 0; temp < inorder.size(); temp++) {
if (inorder[temp] == rootvalue)
break;
}
vector<int> leftinorder(inorder.begin(), inorder.begin() + temp);
vector<int> rightinorder(inorder.begin() + temp + 1, inorder.end());
vector<int> leftpreorder(preorder.begin() + 1,preorder.begin() + 1 + leftinorder.size());
vector<int> rightpreorder(preorder.begin() + 1 + leftinorder.size(),preorder.end());
root->left = buildTree(leftpreorder, leftinorder);
root->right = buildTree(rightpreorder, rightinorder);
return root;
}
};
