leetcode【DFS】-----105. Construct Binary Tree from Preorder and Inorder Traversal【构造二叉树】
1、题目描述

2、分析
从前序和中序中构造二叉树,构造二叉树最关键的是找到根节点,这个题和用后序和中序构造二叉树的思路上是一样的,首先找到根节点,然后将数组再分为两部分,递归的构造左右子树。
3、代码
/**
* 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.size()==0||inorder.size()==0) return NULL;
vector<int> preleft,preright,midleft,midright;
int target=0;
TreeNode* Head=new TreeNode(preorder[0]);
for(int i=0;i<inorder.size();++i){
if(inorder[i]==preorder[0]){
target=i;
break;
}
}
//重建左子树数组
for(int i=0;i<target;++i){
preleft.push_back(preorder[i+1]);
midleft.push_back(inorder[i]);
}
//重建右子树数组
for(int i=target+1;i<preorder.size();++i){
preright.push_back(preorder[i]);
midright.push_back(inorder[i]);
}
Head->left=buildTree(preleft,midleft);
Head->right=buildTree(preright,midright);
return Head;
}
};
4、相关知识点
构造树的递归。

浙公网安备 33010602011771号