二叉树中的深搜 算法专题

二叉树中的深搜

在这里插入图片描述

一. 计算布尔二叉树的值

计算布尔二叉树的值

class Solution {
    public boolean evaluateTree(TreeNode root) {
        if(root.left == null) return root.val == 0? false: true;

        boolean left = evaluateTree(root.left);
        boolean right = evaluateTree(root.right);
         
        return root.val == 2 ? left | right : left & right;

    }
}

二. 求根节点到叶子结点数字之和

求根节点到叶子结点数字之和

class Solution {
    public int sumNumbers(TreeNode root) {
        return dfs(root, 0);
    }

    public int dfs(TreeNode root, int sum){
        if(root == null) return 0;
        int tmp = sum * 10 + root.val;
        if(root.left == null && root.right == null){
            return tmp;
        }

        return dfs(root.left, tmp) + dfs(root.right, tmp);


    }
}

三. 二叉树剪枝

二叉树剪枝

class Solution {
    public TreeNode pruneTree(TreeNode root) {
        if (root == null)
            return root;
        root.left = pruneTree(root.left);
        root.right = pruneTree(root.right);
        if (root.left == null && root.right == null && root.val == 0)
            return null;
        return root;
    }
}

四. 验证二叉搜索树

验证二叉搜索树

class Solution {
    long prev = Long.MIN_VALUE;
    public boolean isValidBST(TreeNode root) {
        if(root == null) return true;
        //判断左子树是否是二叉搜索树
        boolean left = isValidBST(root.left);
        //剪枝
        if(left == false) return false;
        //判断当前结点是否是二叉搜索树
        boolean cur = false;
        if(root.val > prev) cur = true;
        //剪枝
        if(cur == false) return false;

        prev = root.val;

        //判断右子树是否是二叉搜索树
        boolean right = isValidBST(root.right);

        return left && cur && right;
        
    }
}

五. 二叉搜索树中第k小的元素

二叉搜索树中第k小的元素

class Solution {
    int count;
    int ret;

    public int kthSmallest(TreeNode root, int k) {
        count = k;
        dfs(root);
        return ret;
    }

    public void dfs(TreeNode root) {
        if (root == null)
            return;
        //剪枝
        if (count == 0)
            return;
        dfs(root.left);
        count--;
        if (count == 0) {
            ret = root.val;
            //剪枝
            return;
        }
        dfs(root.right);
    }
}

六. 二叉树的所有路径

二叉树的所有路径

class Solution {
    List<String> ret = new ArrayList<>();

    public List<String> binaryTreePaths(TreeNode root) {
        StringBuffer path = new StringBuffer();
        dfs(root, path);
        return ret;
    }

    public void dfs(TreeNode root, StringBuffer _path){
        //让每次递归修改的不是同一个path----'还原现场'
        StringBuffer path = new StringBuffer(_path);

        if(root == null) return ;
        path.append(Integer.toString(root.val));
        //如果是叶子结点
        if(root.left == null && root.right == null) {
        ret.add(path.toString());//结果加入到ret中
        return;
        }
        //不是叶子结点
        path.append("->");
        dfs(root.left, path);
        dfs(root.right, path);
        
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/905151.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

静态水印+动态水印,开启超强PPT版权保护!

在保护 PPT 内容版权时&#xff0c;水印是一种既简单又有效的手段。无论你是为了防止内容被非法复制&#xff0c;还是为了在传播中标明作者身份&#xff0c;水印都能为你的 PPT 提供额外的安全保障。 在传统的 PPT 制作中&#xff0c;最常见的水印添加方法是通过「幻灯片母版」…

std.move 可以重复使用吗?普通变量不行,shared_ptr包装后可以

std.move std::move函数本身可以重复调用&#xff0c;但这取决于对象的状态。在C中&#xff0c;std::move函数用于将一个对象转换为右值引用&#xff0c;从而允许我们从该对象中提取所有权&#xff0c;而不需要创建新的对象。然而&#xff0c;std::move并不会改变对象的状态&am…

关于图像分解的RPCA

将矩阵分解为低秩矩阵和独立同分布的高斯矩阵是PCA 当矩阵 E0 为稀疏的噪声矩阵时&#xff0c;分解为一个低秩矩阵部分 A 和一个稀疏矩阵部分 E 的 矩阵的秩和 ℓ0 范数问题都可以进行凸松弛&#xff0c;矩阵的核范数是矩阵秩的凸包络&#xff0c;&#xff08;1&#xff09;变…

XHCI 1.2b 规范摘要(八)

系列文章目录 XHCI 1.2b 规范摘要&#xff08;一&#xff09; XHCI 1.2b 规范摘要&#xff08;二&#xff09; XHCI 1.2b 规范摘要&#xff08;三&#xff09; XHCI 1.2b 规范摘要&#xff08;四&#xff09; XHCI 1.2b 规范摘要&#xff08;五&#xff09; XHCI 1.2b 规范摘要…

【远程项目管理】Focalboard如何在Windows环境使用Docker快速部署

文章目录 前言1. 使用Docker本地部署Focalboard1.1 在Windows中安装 Docker1.2 使用Docker部署Focalboard 2. 安装Cpolar内网穿透工具3. 实现公网访问Focalboard4. 固定Focalboard公网地址 前言 本篇文章将介绍如何在Windows系统本地快速部署Focalboard项目管理工具&#xff0…

WebStorm EsLint报红色波浪线

如图左侧。 这个错误是由于 ESLint 和 Prettier 的配置不一致导致的。它建议你移除多余的空格。以下是一些解决方法&#xff1a; 安装 Prettier 插件&#xff1a; 确保你在 WebStorm 中安装了 Prettier 插件&#xff0c;并确保它配置正确。 调整 ESLint 配置&#xff1a; 检查…

【Flask】二、Flask 路由机制

目录 什么是路由&#xff1f; Flask中的路由 基本路由 动态路由 路由中的HTTP方法 路由函数返回 在Web开发中&#xff0c;路由是将URL映射到相应的处理函数的过程。Flask是一个轻量级的Web应用框架&#xff0c;提供了简单而强大的路由机制&#xff0c;使得开发者能够轻松…

如何用Python同时抓取多个网页:深入ThreadPoolExecutor

背景介绍 在信息化时代&#xff0c;数据的实时性和获取速度是其核心价值所在。对于体育赛事爱好者、数据分析师和投注行业而言&#xff0c;能否快速、稳定地抓取到实时比赛信息显得尤为重要。特别是在五大足球联赛中&#xff0c;能够在比赛进行时获得比分、控球率等实时数据&a…

深入计算机语言之C++:内存管理

&#x1f511;&#x1f511;博客主页&#xff1a;阿客不是客 &#x1f353;&#x1f353;系列专栏&#xff1a;从C语言到C语言的渐深学习 欢迎来到泊舟小课堂 &#x1f618;博客制作不易欢迎各位&#x1f44d;点赞⭐收藏➕关注 一、 C/C的内存分布 我们先来看一段代码&#xf…

使用Vue.js和Vuex构建可维护的前端应用

使用Vue.js和Vuex构建可维护的前端应用 Vue.js简介 安装Vue.js 使用npm安装 使用CDN引入 创建Vue项目 安装Vuex 初始化Vuex Store 在Vue组件中使用Store Vuex模块化 Vuex命名空间 Vuex插件 Vuex热重载 Vuex持久化状态 Vuex调试工具 Vuex的高级用法 异步Actions 中间件 Vuex的…

云智慧完成华为原生鸿蒙系统的适配, 透视宝 APM 为用户体验保驾护航

2024 年 10 月 22 日&#xff0c;首个国产移动操作系统 —— 华为原生鸿蒙操作系统 HarmonyOS NEXT 正式面世&#xff0c;成为继 iOS 和 Android 后的全球第三大移动操作系统。HarmonyOS NEXT&#xff0c;从系统内核、数据库根基&#xff0c;到编程语言创新、AI&#xff08;人工…

Metasploit(MSF)使用

目录 Metasploit简要介绍 主要功能 漏洞利用&#xff1a; Payload 生成&#xff1a; 辅助模块&#xff1a; 后渗透模块&#xff1a; 报告生成&#xff1a; 使用教程以及案例 基础命令使用 生成被控端 命令介绍 kali启动主控端 1.启动以及设置载荷等配置 漏洞检测…

Linux 开机自动挂载硬盘

在日常使用 Linux 系统的过程中&#xff0c;我们可能需要挂载一些机械硬盘或者移动硬盘来存储数据。手动挂载虽然简单&#xff0c;但每次重启后都需要重新操作&#xff0c;未免有些繁琐。那么&#xff0c;如何让硬盘在开机时自动挂载呢&#xff1f;本篇博客将详细介绍如何通过配…

GPU 学习笔记三:GPU多机多卡组网和拓扑结构分析(基于数据中心分析)

文章目录 一、概述二、数据中心&#xff08;DC&#xff09;2.1 数据中心简介2.2 传统数据中心的网络模型2.3 脊叶网络模型&#xff08;Spine-Leaf&#xff09;2.4 Facebook的Fabric网络架构 三、基于数据中心的多机多卡拓扑3.1 Spine-Leaf 架构网络规模测算方法3.2 NVIDIA多机多…

基于 GADF+Swin-CNN-GAM 的高创新扰动信号识别模型!

往期精彩内容&#xff1a; Python-电能质量扰动信号数据介绍与分类-CSDN博客 Python电能质量扰动信号分类(一)基于LSTM模型的一维信号分类-CSDN博客 Python电能质量扰动信号分类(二)基于CNN模型的一维信号分类-CSDN博客 Python电能质量扰动信号分类(三)基于Transformer的一…

【QNAP威联通NAS系统恢复进阶教程】如果 .conf 和 md9 无法自动组装,如何恢复 NAS?

创作立场&#xff1a;原创不易&#xff0c;拒绝搬运~ hello大家好&#xff0c;我是你们的老伙伴&#xff0c;稳重的大王~ 从本期开始&#xff0c;大王将在日常教程中&#xff0c;分享一些QNAP系统故障的排除以及解决办法&#xff0c;进阶教程需要具备一定的linux基础&#xf…

一年期免费HTTPS证书:网络安全新选择

HTTPS证书的重要性 HTTPS证书&#xff0c;全称为安全套接字层/传输层安全协议证书&#xff0c;是一种在互联网上建立安全连接的数字证书。它通过公钥加密技术&#xff0c;对网站和用户之间的数据传输进行加密&#xff0c;有效防止数据被窃取或篡改&#xff0c;保障用户信息的安…

k8s-service详解

Service介绍 在kubernetes中&#xff0c;pod是应用程序的载体&#xff0c;我们可以通过pod的ip来访问应用程序&#xff0c;但是pod的ip地址不是固定的&#xff0c;这也就意味着不方便直接采用pod的ip对服务进行访问。 为了解决这个问题&#xff0c;kubernetes提供了Service资源…

Android编译环境构建(可用于物理机、虚拟机、容器化Jenkins环境)

文章目录 需求环境要求文件下载Gradle Version:7.5cmdline-tools至此普通物理环境的Android编译环境已部署完毕 部署maven(可选)Jenkins配置Android构建环境 说明&#xff1a; 物理环境&#xff1a;物理机、虚拟机等 容器化环境&#xff1a;docker等 需求 Gradle Version:7.5 …

MacOS下载安装Logisim(图文教程)

本章教程主要介绍如何在MacOS系统中安装Logisim。 一、Logisim是什么? Logisim是一个用于电子逻辑门电路模拟的教育工具软件。它允许用户通过图形界面构建和测试复杂的数字逻辑电路,如加法器、解码器、编码器、寄存器、内存等,从而帮助学生理解计算机硬件的工作原理。 二、如…