剑指 Offer 07. 重建二叉树 - 力扣(LeetCode) (leetcode-cn.com)
中序遍历结合先序遍历,重建二叉树:
先序遍历头一个数一定是根节点,然后扫描中序数组找到这个值,左边是左子树,右边是右子树,递归建立。
/**
* Definition for a binary tree node.
* 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 nullptr;
int headindex;
TreeNode*head=new TreeNode(preorder[0]);
auto it=find(inorder.begin(),inorder.end(),preorder[0]);
vector<int>inorl(inorder.begin(),it),inorr(it+1,inorder.end());
int n=inorl.size();
vector<int>prel(preorder.begin()+1,preorder.begin()+n+1),prer(preorder.begin()+n+1,preorder.end());
head->left=buildTree(prel,inorl);
head->right=buildTree(prer,inorr);
return head;
}
};