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


    目录
    相关文章
    |
    4月前
    |
    存储 Java
    Java学习笔记 List集合的定义、集合的遍历、迭代器的使用
    Java学习笔记 List集合的定义、集合的遍历、迭代器的使用
    |
    1月前
    |
    存储 Java 开发者
    在 Java 中,如何遍历一个 Set 集合?
    【10月更文挑战第30天】开发者可以根据具体的需求和代码风格选择合适的遍历方式。增强for循环简洁直观,适用于大多数简单的遍历场景;迭代器则更加灵活,可在遍历过程中进行更多复杂的操作;而Lambda表达式和`forEach`方法则提供了一种更简洁的函数式编程风格的遍历方式。
    |
    2月前
    |
    Java 程序员 编译器
    Java|如何正确地在遍历 List 时删除元素
    从源码分析如何正确地在遍历 List 时删除元素。为什么有的写法会导致异常,而另一些不会。
    46 3
    |
    2月前
    |
    前端开发 小程序 Java
    java基础:map遍历使用;java使用 Patten 和Matches 进行正则匹配;后端传到前端展示图片三种情况,并保存到手机
    这篇文章介绍了Java中Map的遍历方法、使用Pattern和matches进行正则表达式匹配,以及后端向前端传输图片并保存到手机的三种情况。
    29 1
    |
    2月前
    |
    存储 算法 Java
    Java一分钟之-数组的创建与遍历
    数组作为Java中存储和操作一组相同类型数据的基本结构,其创建和遍历是编程基础中的基础。通过不同的创建方式,可以根据实际需求灵活地初始化数组。而选择合适的遍历方法,则可以提高代码的可读性和效率。掌握这些基本技能,对于深入学习Java乃至其他编程语言的数据结构和算法都是至关重要的。
    33 6
    |
    3月前
    |
    域名解析 分布式计算 网络协议
    java遍历hdfs路径信息,报错EOFException
    java遍历hdfs路径信息,报错EOFException
    42 3
    |
    2月前
    【LeetCode 37】106.从中序与后序遍历构造二叉树
    【LeetCode 37】106.从中序与后序遍历构造二叉树
    25 0
    |
    2月前
    |
    算法 Java
    LeetCode(一)Java
    LeetCode(一)Java
    |
    4月前
    |
    存储 算法 Java
    LeetCode经典算法题:打家劫舍java详解
    LeetCode经典算法题:打家劫舍java详解
    79 2
    |
    4月前
    |
    人工智能 算法 Java
    LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
    LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
    55 1