leetcode-105. 从前序与中序遍历序列构造二叉树
程序员文章站
2022-03-01 14:58:20
...
leetcode-105. 从前序与中序遍历序列构造二叉树
给定两个整数数组 preorder
和 inorder
,其中 preorder
是二叉树的先序遍历, inorder
是同一棵树的中序遍历,请构造二叉树并返回其根节点。
示例 1:
输入: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]
输出: [3,9,20,null,null,15,7]
示例 2:
输入: preorder = [-1], inorder = [-1]
输出: [-1]
提示:
1 <= preorder.length <= 3000
inorder.length == preorder.length
-3000 <= preorder[i], inorder[i] <= 3000
-
preorder
和inorder
均 无重复 元素 -
inorder
均出现在preorder
-
preorder
保证 为二叉树的前序遍历序列 -
inorder
保证 为二叉树的中序遍历序列
/**
* 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* func_build_bitree(vector<int> inorder, vector<int> preorder,int s1,int e1,int s2,int e2){
if (s1 > e1 || s2 > e2) // 空节点
return NULL;
int rootVal = preorder[s2]; // 根节点的值
int rootIndex = 0; // 根节点在中序遍历中的位置
for(rootIndex = 0;rootIndex < inorder.size();rootIndex++){ // 在中序序列中找到根节点的位置
if(inorder[rootIndex] == rootVal)
break;
}
int lLength = rootIndex - s1; // 左子树长度
int rLength = e1 - rootIndex; // 右子树长度
TreeNode* root = new TreeNode(rootVal); // 构造根节点
root->left = func_build_bitree(inorder,preorder,s1,rootIndex - 1,s2 + 1,s2 + lLength);
root->right = func_build_bitree(inorder,preorder,rootIndex + 1,e1,e2 - rLength + 1,e2 );
return root;
}
TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
if(inorder.empty() || preorder.empty())
return NULL;
TreeNode* root = func_build_bitree(inorder,preorder,0,inorder.size() - 1,0,inorder.size() - 1);
return root;
}
};
推荐阅读
-
牛客网---通过前序遍历序列和中序遍历序列建立二叉树
-
树与二叉树 树二叉树前序、中序、后序遍历先根遍历后根遍历
-
从前序与中序遍历序列构造二叉树-二叉树
-
java实现二叉树的前序、中序、后序、层次遍历,递归与非递归
-
LeetCode 105. 从前序与中序遍历序列构造二叉树(各种遍历二叉树的性质,递归建树)
-
LeetCode 106. 从中序与后序遍历序列构造二叉树(二叉树基础之树的重建)
-
二叉树前序、中序、后序、层序遍历的递归与非递归java实现
-
java实现 二叉树的构造、前序遍历、中序遍历、后续遍历、广度遍历、 三叉链表
-
从中序与后序遍历序列构造二叉树
-
【树】B022_从中序与后序遍历序列构造二叉树(递归)