105. 从前序与中序遍历序列构造二叉树 --力扣 --JAVA

简介: 给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。

 题目

给定两个整数数组 preorderinorder ,其中 preorder 是二叉树的先序遍历inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。

解题思路

    1. 先序遍历:根左右;
    2. 中序遍历:左根右;
    3. 从先序遍历中确定根节点,再从中序遍历中判断左右子树的长度范围,从而确定左右子树的根节点。

    代码展示

    class Solution {
        public TreeNode buildTree(int[] preorder, int[] inorder) {
            int size = preorder.length;
            Map<Integer,Integer> store = new HashMap<>();
            for (int i = 0; i < inorder.length; i++){
                store.put(inorder[i],i);
            }
            return build(preorder, store,0,0,size - 1);
        }
        private TreeNode build(int[] preorder, Map<Integer,Integer> store, int root,int left,int right){
            if(left > right){
                return null;
            }
            TreeNode node = new TreeNode(preorder[root]);
            int middle = store.get(preorder[root]);
            node.left = build(preorder, store,root + 1, left, middle - 1);
            //middle - left是左子树的长度 1表示下一个节点
            node.right = build(preorder, store,root + middle - left + 1, middle + 1, right);
            return node;
        }
    }

    image.gif


    目录
    相关文章
    |
    15天前
    |
    存储 Java 开发者
    在 Java 中,如何遍历一个 Set 集合?
    【10月更文挑战第30天】开发者可以根据具体的需求和代码风格选择合适的遍历方式。增强for循环简洁直观,适用于大多数简单的遍历场景;迭代器则更加灵活,可在遍历过程中进行更多复杂的操作;而Lambda表达式和`forEach`方法则提供了一种更简洁的函数式编程风格的遍历方式。
    |
    26天前
    |
    Java 程序员 编译器
    Java|如何正确地在遍历 List 时删除元素
    从源码分析如何正确地在遍历 List 时删除元素。为什么有的写法会导致异常,而另一些不会。
    21 3
    |
    1月前
    |
    前端开发 小程序 Java
    java基础:map遍历使用;java使用 Patten 和Matches 进行正则匹配;后端传到前端展示图片三种情况,并保存到手机
    这篇文章介绍了Java中Map的遍历方法、使用Pattern和matches进行正则表达式匹配,以及后端向前端传输图片并保存到手机的三种情况。
    20 1
    |
    1月前
    |
    存储 算法 Java
    Java一分钟之-数组的创建与遍历
    数组作为Java中存储和操作一组相同类型数据的基本结构,其创建和遍历是编程基础中的基础。通过不同的创建方式,可以根据实际需求灵活地初始化数组。而选择合适的遍历方法,则可以提高代码的可读性和效率。掌握这些基本技能,对于深入学习Java乃至其他编程语言的数据结构和算法都是至关重要的。
    28 6
    |
    1月前
    |
    Java
    【用Java学习数据结构系列】震惊,二叉树原来是要这么学习的(二)
    【用Java学习数据结构系列】震惊,二叉树原来是要这么学习的(二)
    27 1
    |
    1月前
    |
    算法 Java C语言
    【用Java学习数据结构系列】震惊,二叉树原来是要这么学习的(一)
    【用Java学习数据结构系列】震惊,二叉树原来是要这么学习的(一)
    24 1
    |
    25天前
    |
    算法 Java
    JAVA 二叉树面试题
    JAVA 二叉树面试题
    14 0
    |
    1月前
    【LeetCode 37】106.从中序与后序遍历构造二叉树
    【LeetCode 37】106.从中序与后序遍历构造二叉树
    17 0
    |
    2月前
    |
    Unix Shell Linux
    LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
    本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
    LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
    |
    3月前
    |
    搜索推荐 索引 Python
    【Leetcode刷题Python】牛客. 数组中未出现的最小正整数
    本文介绍了牛客网题目"数组中未出现的最小正整数"的解法,提供了一种满足O(n)时间复杂度和O(1)空间复杂度要求的原地排序算法,并给出了Python实现代码。
    114 2
    下一篇
    无影云桌面