LeetCode105. 从前序与中序遍历序列构造二叉树
程序员文章站
2022-03-09 10:03:36
...
题目
根据一棵树的前序遍历与中序遍历构造二叉树。
注意:
你可以假设树中没有重复的元素。
例如,给出
前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = [9,3,15,20,7]
返回如下的二叉树:
3 / \ 9 20 / \ 15 7
分析
前序遍历判断出的根节点,再根据中序遍历来分出左右子树,分出来的左右子树再依次根据前序遍历的根节点又分出左右子树……
前序遍历 preorder = [3,9,20,15,7]
中序遍历 inorder = [9,3,15,20,7]
首先 在前序中 可以得出 3 是根节点,继而可以在中序中知道 3 的左边 9 是它的左子树,而 3 的右边 15,20,7是右子树。
然后,左子树9 右子树15,20,7分别作为一个单独的树,重复上述步骤。
最后返回树。
代码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public TreeNode buildTree(int[] preorder, int[] inorder) {
return build(preorder,inorder,0,0,inorder.length-1);
}
public static TreeNode build(int[] preorder, int[] inorder, int preindex, int sInorder , int eInorder){
if (preindex > preorder.length-1 || sInorder > eInorder ) return null;
TreeNode treeNode = new TreeNode(preorder[preindex]);
int index = sInorder;
for (; index <= eInorder; index++)
if (treeNode.val == inorder[index]) break;
treeNode.left = build(preorder,inorder,preindex+1,sInorder,index-1);
treeNode.right = build(preorder,inorder,preindex+index-sInorder+1, index+1, eInorder);
return treeNode;
}
}
上一篇: Python 机器学习基础(二)——Numpy 篇
下一篇: fortran三次样条插值程序实例
推荐阅读
-
牛客网---通过前序遍历序列和中序遍历序列建立二叉树
-
树与二叉树 树二叉树前序、中序、后序遍历先根遍历后根遍历
-
从前序与中序遍历序列构造二叉树-二叉树
-
java实现二叉树的前序、中序、后序、层次遍历,递归与非递归
-
LeetCode 105. 从前序与中序遍历序列构造二叉树(各种遍历二叉树的性质,递归建树)
-
LeetCode 106. 从中序与后序遍历序列构造二叉树(二叉树基础之树的重建)
-
二叉树前序、中序、后序、层序遍历的递归与非递归java实现
-
java实现 二叉树的构造、前序遍历、中序遍历、后续遍历、广度遍历、 三叉链表
-
从中序与后序遍历序列构造二叉树
-
【树】B022_从中序与后序遍历序列构造二叉树(递归)