LeetCode 105. 从前序与中序遍历序列构造二叉树(各种遍历二叉树的性质,递归建树)
程序员文章站
2022-05-20 20:25:18
...
这道题算是二叉树里面的基础题、经典问题了。
解决这道题,需要知道二叉树的递归定义。二叉树的前序遍历、中序遍历的性质,并用这个性质建树。
注:
- 必须要有中序遍历。
- 编号的数字不能重复。
/**
* 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) {
int n = preorder.size();
return create(0,n-1,0,n-1,preorder,inorder);
}
TreeNode* create(int preL,int preR,int inL,int inR,vector<int>& preorder, vector<int>& inorder){
if(preL>preR){
return nullptr;
}
int val = preorder[preL];
TreeNode* node = new TreeNode(val);
int idx = 0;
for(int i=inL;i<=inR;i++){
if(inorder[i]==val){
idx = i;
break;
}
}
int numLeft = idx-inL;
node->left = create(preL+1,preL+numLeft,inL,idx-1,preorder,inorder);
node->right = create(preL+numLeft+1,preR,idx+1,inR,preorder,inorder);
return node;
}
};
上一篇: LeetCode 814. 二叉树剪枝(DFS统计和)
下一篇: 搜索算法之宽度优先搜索(bfs)
推荐阅读
-
LeetCode 105. 从前序与中序遍历序列构造二叉树(各种遍历二叉树的性质,递归建树)
-
105.从前序与中序遍历序列构造二叉树+106.从中序与后序遍历序列构造二叉树
-
Leetcode105. 从前序与中序遍历序列构造二叉树
-
Leetcode105. 从前序与中序遍历序列构造二叉树
-
leetcode105. 从前序与中序遍历序列构造二叉树
-
LeetCode105. 从前序与中序遍历序列构造二叉树
-
Leetcode105. 从前序与中序遍历序列构造二叉树
-
leetcode105. 从前序与中序遍历序列构造二叉树
-
LeetCode105. 从前序与中序遍历序列构造二叉树
-
LeetCode105. 从前序与中序遍历序列构造二叉树