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 小时前
大语言模型分布式训练:从并行策略到万卡工程的系统梳理
人工智能·分布式·深度学习·算法·目标检测·机器学习·语言模型
Doraemomo7 小时前
数据结构-环形链表
java·数据结构·链表
Forever Nore8 小时前
LeetCode 4 寻找两个正序数组的中位数 - 二分
算法·leetcode
罗西的思考10 小时前
【OpenClaw具身硬件】MiniClaw 阅读笔记---(1)基础
人工智能·算法·机器学习
蛋先生DX10 小时前
大模型参数存储格式揭秘:BF不是男朋友
深度学习·算法·llm
爱跳舞的烤冷面11 小时前
自学嵌入式第22天(数据结构——哈希)
数据结构·算法·哈希算法
猎嘤一号11 小时前
博弈论(Game Theory)的理论、算法与工程
人工智能·算法·安全·博弈论
月光船幽幽11 小时前
影子模式下保护 logits 不被修改
人工智能·python·算法
马拉AI11 小时前
腾讯开源 Agent 记忆系统,AI“换对话就忘”的问题有了新解法(附安装使用教程)
人工智能·算法·开源·科研
MC皮蛋侠客13 小时前
Redis 系列(一):全景与最小闭环——从 `SET` 命令到内存数据结构
数据结构·数据库·redis