树和二叉树_6
树和二叉树_6
- 一、leetcode-105
- 二、题解
- 1.引库
- 2.代码
一、leetcode-105
从前序与中序遍历序列构造二叉树
给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。
样例输入:preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]
样例输出: [3,9,20,null,null,15,7]
二、题解
1.引库
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <queue>
#include <stack>
#include <algorithm>
#include <string>
#include <map>
#include <set>
#include <vector>
using namespace std;
2.代码
/**
* 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) {
if(preorder.size()==0) return NULL;
int pos=0,n=preorder.size();
while(inorder[pos]!=preorder[0]) pos++;
TreeNode *root=new TreeNode(preorder[0]);
vector<int> preArr,inArr;
for(int i=1;i<=pos;i++) preArr.push_back(preorder[i]);
for(int i=0;i<pos;i++) inArr.push_back(inorder[i]);
root->left=buildTree(preArr,inArr);
preArr.clear(),inArr.clear();
for(int i=pos+1;i<n;i++) preArr.push_back(preorder[i]);
for(int i=pos+1;i<n;i++) inArr.push_back(inorder[i]);
root->right=buildTree(preArr,inArr);
return root;
}
};