随想录刷题笔记 —二叉树篇6 513找树左下角的值 112路径总和 106中序后序构造二叉树

513找树左下角的值

找出该二叉树的 最底层 最左边节点的值

解法一:队列------层次遍历

java 复制代码
class Solution {
    public int findBottomLeftValue(TreeNode root) {
        Queue<TreeNode> treeNodes = new LinkedList<>();
        treeNodes.offer(root);
        int count = 1;
        int result = root.val;
        while (!treeNodes.isEmpty()){
            TreeNode temp = treeNodes.poll();
            count--;
            if (temp.left!=null){
                treeNodes.offer(temp.left);
            }
            if (temp.right!=null){
                treeNodes.offer(temp.right);
            }
            if (count==0){
                if (!treeNodes.isEmpty()){
                    result = treeNodes.peek().val;
                }
                count = treeNodes.size();
            }
        }
        return result;
    }
}

解法二:递归

设置maxdepth变量,记录最大深度。

java 复制代码
class Solution {
    public int findBottomLeftValue(TreeNode root) {
        fBLValue(root, 1);
        return resultval;
    }
    int maxdepth = 0;
    int resultval = 0;
    void fBLValue(TreeNode root, int depth) {
        if (root.right==null&&root.left==null){
            if (maxdepth<depth){
                resultval=root.val;
                maxdepth=depth;
            }
            return;
        }
        if (root.left!=null){
            fBLValue(root.left, depth+1);
        }
        if (root.right!=null){
            fBLValue(root.right, depth+1);
        }
    }
}

112路径总和

是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum

递归:传入参数value,表示从根节点到此节点的路径值。

当结点是叶子节点时,计算路径值是否=targetSum

java 复制代码
class Solution {
    public boolean hasPathSum(TreeNode root, int targetSum) {
        if (root==null){
            return false;
        }
        return hasPathS(root, targetSum, 0);
    }
    boolean hasPathS(TreeNode root, int targetSum, int value) {
        if (root==null){
            return false;
        }
        if (root.right==null&&root.left==null){
            return value + root.val == targetSum;
        }
        return hasPathS(root.left, targetSum, value+root.val)||hasPathS(root.right, targetSum, value+root.val);
        }
}

106中序后序构造二叉树

递归:以 后序 数组的最后一个元素为切割点,先切中序数组,根据中序数组,反过来再切后序数组。

一层一层切下去,每次后序数组最后一个元素就是节点元素。

java 复制代码
class Solution {
    public TreeNode buildTree(int[] inorder, int[] postorder) {
        TreeNode root = new TreeNode(postorder[postorder.length-1], null, null);
        int mid = findindex(inorder, postorder[postorder.length-1], 0, inorder.length-1);
        if (mid!=0){
            root.left = buildTree(Arrays.copyOfRange(inorder, 0, mid), Arrays.copyOfRange(postorder, 0, mid));
        }
        if (mid!=inorder.length-1){
            root.right = buildTree(Arrays.copyOfRange(inorder, mid+1, inorder.length), Arrays.copyOfRange(postorder, mid, postorder.length-1));
        }
        return root;
    }

    int findindex(int[] order, int value, int left, int right){
        for (int i = left; i <= right; i++) {
            if (value==order[i]){
                return i;
            }
        }
        return -1;
    }
}

收获

二叉树就是统统递归,回溯

相关推荐
cao233338 分钟前
关于 y0 y1 yn 变量名冲突说法的指正
笔记
鶴哥只手遮天1 小时前
Spring AI 2.0.1 深度解析-第 14 章 MCP 服务端(上):注解式实现与工具来源
java·人工智能·开源
鶴哥只手遮天1 小时前
Spring AI 2.0.1 深度解析-第 15 章 MCP 服务端(下):三种协议形态、Streamable 传输与状态管理
java·人工智能·开源
鶴哥只手遮天1 小时前
Spring AI 2.0.1 深度解析-第 16 章 向量存储(上):`VectorStore` 接口体系、`BatchingStrategy`
java·人工智能·开源
鶴哥只手遮天1 小时前
Spring AI 2.0.1 深度解析-第 12 章 工具循环的流式形态、Usage 累加与扩展体系
java·人工智能·开源
鶴哥只手遮天1 小时前
Spring AI 2.0.1 深度解析-第 23 章 模型供应商实现:从 `OpenAiSetup` 到 Bedrock
java·人工智能·开源
鶴哥只手遮天1 小时前
Spring AI 2.0.1 深度解析-第 06 章 内置 Advisor 全景:13 个实现逐个剖到源码级
java·人工智能·开源
鶴哥只手遮天1 小时前
Spring AI 2.0.1 深度解析-第 03 章 消息体系与 Prompt:不可变模型、`ChatOptions` 与模板渲染
java·人工智能·开源
鶴哥只手遮天1 小时前
Spring AI 2.0.1 深度解析-第 24 章 生产实践与 2.x 迁移:陷阱清单、AOT 与调优
java·人工智能·开源
鶴哥只手遮天1 小时前
Spring AI 2.0.1 深度解析-第 10 章 工具调用(中):执行链路、结果转换与工具限制
java·人工智能·开源