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;
    }
}
相关推荐
顶点多余8 小时前
那些在算法中适合巩固的知识点---1
java·前端·算法
AI情绪识别开源9 小时前
检信 ALLEMOTION OS 加密打包可执行程序 — 全面测试报告版本: v1.3功能测试 / 性能测试 /
开发语言·数据结构·人工智能·功能测试
罗西的思考10 小时前
【Agentic RL / 强化学习框架】Molt 设计解读
人工智能·算法·机器学习
hahaha601610 小时前
HLS高层次综合设计技巧--C++类和模板
图像处理·人工智能·算法·计算机视觉
多弗朗皮卡丘11 小时前
算法详解4:买卖股票的最佳时机系列(上)
算法
维克兜率天13 小时前
【维克】动量指标家族:RSI、ROC、CCI、Momentum全面解析
python·算法
AI情绪识别开源14 小时前
检信 AI 智能推广平台(代号:JX-Promote)
人工智能·算法·erlang
老当益壮梁奶奶15 小时前
Linux软件编程学习笔记(八):进程间通信详解(1)
linux·c语言·笔记·学习·算法
不会就选b15 小时前
算法日常・每日刷题--<BFS拓扑排序>4
算法
不正经学生15 小时前
C语言动态内存管理(上):堆上的自由与责任
c语言·开发语言·c++·算法·面试