105. 从前序与中序遍历序列构造二叉树

通过前序遍历,前序遍历的第一个节点是头节点,这样我们就找到了头节点,现在去中序遍历中找到头节点的位置,头节点左边的是左子节点树,右边是右子节点树,我们只需要对每一个节点都进行这么处理就行,不断切分数组,找到每一个头节点

java 复制代码
class Solution {

    public TreeNode buildTree(int[] preorder, int[] inorder) {

        // 没节点了
        if (preorder.length == 0) {
            return null;
        }

        // 前序第一个是根
        int rootVal = preorder[0];
        TreeNode root = new TreeNode(rootVal);

        // 在中序中找根的位置
        int index = 0;

        while (inorder[index] != rootVal) {
            index++;
        }

        // 切左子树
        int[] leftPre =
                Arrays.copyOfRange(preorder, 1, index + 1);

        int[] leftIn =
                Arrays.copyOfRange(inorder, 0, index);

        // 切右子树
        int[] rightPre =
                Arrays.copyOfRange(preorder, index + 1, preorder.length);

        int[] rightIn =
                Arrays.copyOfRange(inorder, index + 1, inorder.length);

        // 递归构造
        root.left = buildTree(leftPre, leftIn);

        root.right = buildTree(rightPre, rightIn);

        return root;
    }
}
相关推荐
旖-旎7 分钟前
LeetCode 518:零钱兑换||(完全背包)—— 题解
c++·算法·leetcode·动态规划·背包问题
To_OC36 分钟前
LC 42 接雨水:暴力超时卡半天?前后缀数组一用就通了
javascript·算法·leetcode
delishcomcn1 小时前
AI视觉识别+分切算法:电化铝缺陷检测与裁切一体化解锁
人工智能·算法
触底反弹2 小时前
深入理解大模型采样:Temperature、Top-K、Top-P 的原理与实战
人工智能·算法·面试
雪碧聊技术2 小时前
力扣 LCR 091. 粉刷房子 —— 动态规划入门详解
算法·动态规划
延凡科技4 小时前
多场景落地复盘:端边云架构无人机智能巡检系统设计与实践
大数据·数据结构·人工智能·科技·架构·无人机·能源
CV-Climber5 小时前
检索技术的实际应用
人工智能·算法
hhzz5 小时前
Tiger AI Platform平台中增加人脸识别功能
图像处理·人工智能·算法·计算机视觉·大模型
从零开始的代码生活_6 小时前
C++ 继承详解:访问控制、对象模型、菱形继承与设计取舍
开发语言·c++·后端·学习·算法