构造二叉树可以通过 前序+中序 、后序+中序两种方法。
这两种方法的核心思路都是 通过前/后序确定二叉树的根节点,然后在中序中根据根节点进行划分。然后递归。
前序+中序
class Solution {
public:
TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> vin) {
return BuildTree(0,pre.size()-1,0,vin.size()-1,pre,vin);
}
TreeNode* BuildTree(int leftpre,int rightpre,int leftin,int rightin,vector<int> pre,vector<int> vin){
if(leftin>rightin)return NULL;
TreeNode* root=new TreeNode(pre[leftpre]);
int rootin=leftin;
while(rootin<=rightin&&pre[leftpre]!=vin[rootin])rootin++;
int left=rootin-leftin;
root->left=BuildTree(leftpre+1,leftpre+1+left-1,leftin,rootin-1,pre,vin);
root->right=BuildTree(leftpre+left+1,rightpre,rootin+1,rightin,pre,vin);
return root;
}
};
后序+中序(引用leetcode“宝宝可乖了”)