力扣-Hot100-二叉树其二【算法学习day.33】

前言

###我做这类文档一个重要的目的还是给正在学习的大家提供方向(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非常非常高滴!!!


习题

1.从前序和中序遍历序列构造二叉树

题目链接: 105. 从前序与中序遍历序列构造二叉树 - 力扣(LeetCode)

题面:

**基本分析:**前序遍历数组中第一个是头结点,头结点在中序遍历数组中的位置为1,1之前的节点都属于头结点的左子树节点,1之后的节点都属于头结点的右子树节点,根据此规律递归下去

代码:

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 {
    public TreeNode buildTree(int[] preorder, int[] inorder) {
       TreeNode root =  recursion(preorder,0,preorder.length-1,inorder,0,inorder.length-1);
       return root;
    }
    public TreeNode recursion(int[] preorder,int prestart,int preend, int[] inorder,int instart,int inend){
        if(prestart>preend)return null;
        int rootval = preorder[prestart];
        TreeNode root = new TreeNode(rootval);
        int index = 0;
        for(int i = instart;i<=inend;i++){
            if(inorder[i]==rootval){
                index = i;
                break;
            }
        }
        int leftnum = index - instart;
        root.left = recursion(preorder,prestart+1,prestart+leftnum,inorder,instart,instart+leftnum-1);
        root.right = recursion(preorder,prestart+leftnum+1,preend,inorder,instart+leftnum+1,inend);
        return root;
    }
}

2. 路径总和III

题目链接: 437. 路径总和 III - 力扣(LeetCode)

题面:

**基本分析:**利用dfs暴力,力扣题解中也有大佬使用前缀和,推荐看一下

代码:

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 {
    int ans = 0;
    int targetSum;
    public int pathSum(TreeNode root, int targetSum) {
        if(root==null)return 0;
        this.targetSum=targetSum;
        recursion(root);
        return ans;
    }
    public void recursion(TreeNode root){
        if(root==null){
            return;
        }
        recursion2(root,root.val);
        recursion(root.left);
        recursion(root.right);
      
    }
     public void recursion2(TreeNode root,long val){
       if(val==targetSum)ans++;
       if(root.left!=null)recursion2(root.left,val+root.left.val);
       if(root.right!=null)recursion2(root.right,val+root.right.val);
    }
}

3.二叉树中的最大路径和

题目链接: 124. 二叉树中的最大路径和 - 力扣(LeetCode)

题面:

基本分析:dp

代码:

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 {
    private int ans = Integer.MIN_VALUE;

    public int maxPathSum(TreeNode root) {
        dfs(root);
        return ans;
    }

    private int dfs(TreeNode node) {
        if (node == null) {
            return 0; // 没有节点,和为 0
        }
        int lVal = dfs(node.left); // 左子树最大链和
        int rVal = dfs(node.right); // 右子树最大链和
        ans = Math.max(ans, lVal + rVal + node.val); // 两条链拼成路径
        return Math.max(Math.max(lVal, rVal) + node.val, 0); // 当前子树最大链和(注意这里和 0 取最大值了)
    }
}

后言

上面是力扣Hot100的二叉树专题,下一篇是该专题的其他题目,希望有所帮助,一同进步,共勉!

相关推荐
卡尔特斯1 小时前
Android Kotlin 项目代理配置【详细步骤(可选)】
android·java·kotlin
白鲸开源1 小时前
Ubuntu 22 下 DolphinScheduler 3.x 伪集群部署实录
java·ubuntu·开源
ytadpole2 小时前
Java 25 新特性 更简洁、更高效、更现代
java·后端
纪莫2 小时前
A公司一面:类加载的过程是怎么样的? 双亲委派的优点和缺点? 产生fullGC的情况有哪些? spring的动态代理有哪些?区别是什么? 如何排查CPU使用率过高?
java·java面试⑧股
JavaGuide3 小时前
JDK 25(长期支持版) 发布,新特性解读!
java·后端
用户3721574261353 小时前
Java 轻松批量替换 Word 文档文字内容
java
白鲸开源3 小时前
教你数分钟内创建并运行一个 DolphinScheduler Workflow!
java
CoovallyAIHub3 小时前
中科大DSAI Lab团队多篇论文入选ICCV 2025,推动三维视觉与泛化感知技术突破
深度学习·算法·计算机视觉
Java中文社群3 小时前
有点意思!Java8后最有用新特性排行榜!
java·后端·面试
代码匠心4 小时前
从零开始学Flink:数据源
java·大数据·后端·flink