# leetcode.105 从前序与中序遍历序列构造二叉树

105. 从前序与中序遍历序列构造二叉树

前序遍历 preorder = [3,9,20,15,7]

    3
/ \
9  20
/  \
15   7

preorder第一个元素为root，在inorder里面找到root，在它之前的为左子树（长l1），之后为右子树（长l2）。

preorder[1]到preorder[l1]为左子树,之后为右子树，分别递归。

#include <iostream>
#include <vector>

using namespace std;

//Definition for a binary tree node.
struct TreeNode{
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};

TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
int presize = preorder.size();
int i;
int rootin = 0;

if(presize <= 0){
return NULL;
}
TreeNode *root = new TreeNode(preorder[0]);
for(i = 0; i < presize; i++){
if(inorder[i] == preorder[0]){
rootin = i;
}
}
vector<int> leftpre;  //左边的树的前序表
vector<int> leftin;   //左边的树的中序表
vector<int> rightpre; //右边的树的前序表
vector<int> rightin;  //右边的树的中序表

for(i = 1; i <= rootin; i++){
leftpre.push_back(preorder[i]);
}
for(i = 0; i <= rootin - 1; i++){
leftin.push_back(inorder[i]);
}
for(i = rootin + 1; i < presize; i++){
rightpre.push_back(preorder[i]);
}
for(i = rootin + 1; i < presize; i++){
rightin.push_back(inorder[i]);
}

root -> left = buildTree(leftpre, leftin);
root -> right = buildTree(rightpre, rightin);
return root;

}

int main(){
TreeNode *root;
int pre[] = {3,9,20,15,7};
int in[] = {9,3,15,20,7};
vector<int> preorder(pre, pre + 5);
vector<int> inorder(in, in + 5);
root = buildTree(preorder, inorder);
cout << root -> right -> val << endl;
return 0;

}



03-09 78

03-05 43

07-14 114

05-22 52

07-11 709

12-19 254

02-26 45

04-10 202

11-06 34

05-22 58

08-05 152

09-23 335

05-28 3033

07-24 3004

11-28 57

06-25 209

05-22 34

05-08 70

08-13 117

08-22 30

04-14 59万+

03-13 15万+

02-19 18万+

03-04 14万+

03-06 1798

03-08 2万+

04-25 6万+

03-10 13万+

03-10 18万+

03-12 11万+

03-13 11万+

03-16 1516

03-18 1万+

03-19 8万+

03-19 3万+

03-20 9494

03-22 4606

03-23 4万+

03-24 3万+

03-25 3万+

05-08 5万+

03-25 9万+

03-27 5万+

03-29 21万+

03-29 10万+

03-30 16万+

05-31 6716

04-02 6097

04-02 4万+

05-31 150

04-06 1万+

04-06 7万+

04-06 2883

04-09 8万+

04-09 3万+

05-17 8931

04-11 4万+

04-15 6万+

04-18 4万+

04-20 4万+

04-24 3万+

05-03 1万+

05-16 5万+

05-06 1万+

05-06 2193

05-07 3845

05-08 4万+

05-10 3512

05-11 2582

05-14 6834

05-14 1186

05-16 3788

05-16 1万+

05-17 5260

05-30 980

05-18 2392

05-18 8694

05-18 3817

05-19 1万+

05-21 8206

#### 石锤！今年Python要过苦日子了？ 程序员：我疯了！

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客