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

java 复制代码
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    //用于记录"中"在inorder的位置
    Map<Integer,Integer> inMap = new HashMap<>();

    public TreeNode buildTree(int[] preorder, int[] inorder) {
        //将inorder中的值和对应下标存入Map中
        for(int i = 0; i < inorder.length; i++){
            inMap.put(inorder[i],i);
        }    

        return build(preorder, 0, preorder.length - 1,
                    inorder, 0 ,inorder.length - 1);
    }
    //带有四个边界指针的处理函数
    private TreeNode build(int[] preorder, int preStart, int preEnd,
                           int [] inorder,int inStart, int inEnd){
        if(preStart > preEnd || inStart > inEnd){
            return null;
        }

        int rootVal = preorder[preStart];
        TreeNode root = new TreeNode(rootVal);

        int rootIndexInorder = inMap.get(rootVal);

        int leftSubtreeSize = rootIndexInorder - inStart;
        //处理左侧
        root.left = build(preorder, preStart + 1, preStart + leftSubtreeSize,
                        inorder, inStart, rootIndexInorder - 1);
        //处理右侧
        root.right = build(preorder, preStart + leftSubtreeSize + 1, preEnd,
                        inorder, rootIndexInorder + 1, inEnd);

        return root;
    }
}

参数中的四个边界指针每次的作用在于重新规定边界

相关推荐
茉莉玫瑰花茶7 分钟前
RAG 数据检索
人工智能·算法·机器学习
speop24 分钟前
hell-gpu| TASK01-2
linux·运维·算法
RisunJan1 小时前
产品经理面试知识点梳理
面试·职场和发展·产品经理
Navigator_Z1 小时前
LeetCode //C - 1223. Dice Roll Simulation
c语言·算法·leetcode
171320330计算机毕设编程1 小时前
2027计算机毕设五大方向对比&选题推荐
java·ide·python·算法·django·php·推荐算法
Tisfy1 小时前
LeetCode 2058.找出临界点之间的最小和最大距离:遍历+遇到极值则更新(这种题谁空间复杂度不是O(1)啊)
linux·数据库·leetcode·链表·题解·模拟·遍历
万物智能1 小时前
设备树DTS-【万物智能之开源鸿蒙OpenHarmony系统实战开发系列教程】
后端·算法
代码不停2 小时前
子数组问题
java·算法
小欣加油2 小时前
Leetcode2058 找出临界点之间的最小和最大距离
数据结构·c++·算法·leetcode·职场和发展
华华哥20222 小时前
《模型不玄学》第25章 双头模型:共享底座 + 两个分支
算法