力扣-数据结构-19【算法学习day.90】

前言

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


习题

1.具有所有最深节点的最小子树

题目链接: 865. 具有所有最深节点的最小子树 - 力扣(LeetCode)

题面:

代码:

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 {
    TreeNode ans;
    int maxdep = 0;
    int count = 0;
    public TreeNode subtreeWithAllDeepest(TreeNode root) {
        ans = root;
        recursion2(root,0);
        recursion3(root,0);
        recursion(root,0);
        return ans;
    }
    public int recursion(TreeNode node,int u){
        if(node.left==null&&node.right==null){
            if(u==maxdep)return 1;
            return 0;
        }
        int l = 0;
        int r = 0;
        if(node.left!=null){
            l = recursion(node.left,u+1);
        }
        if(node.right!=null){
            r = recursion(node.right,u+1);
        }
        int sum = l+r;
        if(sum==count){
           if(count==1){
            if(l==1){
                ans = node.left;
            }else{
                ans = node.right;
            }
            return 999;
           }else{
            ans = node;
            return 999;
           }
        }
        return l+r;
    }

     public void recursion3(TreeNode node,int u){
        if(node.left==null&&node.right==null){
            if(u==maxdep)count++;
        }
        if(node.left!=null){
            recursion3(node.left,u+1);
        }
        if(node.right!=null){
            recursion3(node.right,u+1);
        }
    }

    public void recursion2(TreeNode node,int u){
        if(node.left==null&&node.right==null){
            if(u>maxdep)maxdep = u;
        }
        if(node.left!=null){
            recursion2(node.left,u+1);
        }
        if(node.right!=null){
            recursion2(node.right,u+1);
        }
    }
}

后言

上面是数据结构相关的习题,下一篇文章会将其他相关的习题。

相关推荐
随读手机1 分钟前
多式联运信息交互平台完整方案(2026版)
java·ai·eclipse·云计算·区块链
郝学胜-神的一滴8 分钟前
深度学习优化核心:梯度下降与网络训练全解析
数据结构·人工智能·python·深度学习·算法·机器学习
Je1lyfish35 分钟前
CMU15-445 (2025 Fall/2026 Spring) Project#3 - QueryExecution
linux·c语言·开发语言·数据结构·数据库·c++·算法
许彰午37 分钟前
03-二叉树——从递归遍历到非递归实现
java·算法
nj01281 小时前
Spring 循环依赖详解:三级缓存、早期引用、AOP 代理与懒加载
java·spring·缓存
Brilliantwxx1 小时前
【C++】 vector(代码实现+坑点讲解)
开发语言·c++·笔记·算法
野生技术架构师1 小时前
2026年最全Java面试题及答案汇总(建议收藏,面试前看这篇就够了)
java·开发语言·面试
百锦再2 小时前
Auto.js变成基础知识学习
开发语言·javascript·学习·sqlite·kotlin·android studio·数据库开发
一只叫煤球的猫2 小时前
ThreadForge 源码解读一:ThreadScope 如何把并发任务放进清晰边界?
java·面试·开源
KuaCpp2 小时前
C++新特性学习
c++·学习