【C++刷题】二叉树的深搜

二叉树的深搜

  • 一、计算布尔二叉树的值
    • 1、题目描述
    • 2、代码
    • 3、解析
  • 二、求根节点到叶节点数字之和
    • 1、题目描述
    • 2、代码
    • 3、解析
  • 三、二叉树剪枝
    • 1、题目描述
    • 2、代码
    • 3、解析
  • 四、验证二叉搜索树
    • 1、题目描述
    • 2、代码
    • 3、解析
  • 五、二叉搜索树中第K小的元素
    • 1、题目描述
    • 2、代码
    • 3、解析
  • 六、二叉树的所有路径
    • 1、题目描述
    • 2、代码
    • 3、解析


一、计算布尔二叉树的值

1、题目描述

leetcode链接

在这里插入图片描述

2、代码

class Solution 
{
public:bool evaluateTree(TreeNode* root) {// 出口if(root->left == nullptr){if(root->val == 0){return false;}else{return true;}}// 左子树bool Left = evaluateTree(root->left);bool Right = evaluateTree(root->right);// 结点往上返回if(root->val == 2){return Left | Right;}else{return Left & Right;}}
};

3、解析

在这里插入图片描述

二、求根节点到叶节点数字之和

1、题目描述

leetcode链接
在这里插入图片描述

2、代码

class Solution 
{
public:int sumNumbers(TreeNode* root) {return dfs(root, 0);}int dfs(TreeNode* root, int persum){persum = persum * 10 + root->val;// 1、出口if(root->left == nullptr && root->right == nullptr){return persum;}// 2、函数体int ret = 0;if(root->left){ret += dfs(root->left, persum);}if(root->right){ret += dfs(root->right, persum);}return ret;}
};

3、解析

在这里插入图片描述

三、二叉树剪枝

1、题目描述

leetcode链接
在这里插入图片描述

2、代码

class Solution 
{
public:TreeNode* pruneTree(TreeNode* root) {// 递归出口if(root == nullptr){return nullptr;}// 处理左右子树root->left = pruneTree(root->left);root->right = pruneTree(root->right);// 判断if(root->left == nullptr && root->right == nullptr && root->val == 0){delete root;root = nullptr;}return root;}
};

3、解析

在这里插入图片描述

四、验证二叉搜索树

1、题目描述

leetcode链接
在这里插入图片描述

2、代码

class Solution 
{
public:// 定义一个prev值为最小long prev = LONG_MIN;bool isValidBST(TreeNode* root) {// 出口if(root == nullptr){return true;}bool Lefttree = isValidBST(root->left);// 剪枝if(Lefttree == false)return false;bool cur = false; // 判断当前是不是二叉搜索树if(root->val > prev){cur = true;}// 剪枝if(cur == false){return false;}prev = root->val; // 更新bool Righttree = isValidBST(root->right);if(Lefttree == true && Righttree == true && cur == true){return true;}else{return false;}}
};

3、解析

在这里插入图片描述

五、二叉搜索树中第K小的元素

1、题目描述

leetcode链接
在这里插入图片描述

2、代码

class Solution 
{
public:int ret = 0;int count = 0;int kthSmallest(TreeNode* root, int k) {count = k;dfs(root);return ret;}void dfs(TreeNode* root){// 1、出口if(root == nullptr || count == 0){return;}// 2、中序遍历dfs(root->left);count--;if(count == 0){// 3、优化:剪枝ret = root->val;return;}dfs(root->right);}
};

3、解析

在这里插入图片描述

六、二叉树的所有路径

1、题目描述

leetcode链接
在这里插入图片描述

2、代码

// 不加剪枝
class Solution 
{
public:// 1、定义一个全局返回变量retvector<string> ret;vector<string> binaryTreePaths(TreeNode* root) {// 2、进行dfs函数的调用string path;dfs(root, path);return ret;}void dfs(TreeNode* root, string path){// 3、递归出口if(root == nullptr) return;// 4、叶子结点的增加路径if(root->right == nullptr && root->left == nullptr){path += to_string(root->val);ret.push_back(path);}// 5、非叶子节点path += to_string(root->val);path += "->";// 6、递归dfs(root->left, path);dfs(root->right, path);}
};
// 加剪枝
class Solution 
{
public:vector<string> ret;vector<string> binaryTreePaths(TreeNode* root) {string path;dfs(root, path);return ret;}void dfs(TreeNode* root, string path){if(root->left == nullptr && root->right == nullptr){path += to_string(root->val);ret.push_back(path);return;}path += to_string(root->val);path += "->";if(root->left) dfs(root->left, path);if(root->right) dfs(root->right, path);}
};

3、解析

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

16.docker删除redis缓存数据、redis常用基本命令

1.进入redis容器内部 &#xff08;1&#xff09;筛选过滤出redis容器 docker ps | grep "redis"&#xff08;2&#xff09;进入redis容器 #说明&#xff1a;d24为redis容器iddocker exec -it d24 /bin/bash2.登陆redis (1) 进入redis命令行界面 redis-cli说明&a…

重写Sylar基于协程的服务器(7、TcpServer HttpServer的设计与实现)

重写Sylar基于协程的服务器&#xff08;7、TcpServer & HttpServer的设计与实现&#xff09; 重写Sylar基于协程的服务器系列&#xff1a; 重写Sylar基于协程的服务器&#xff08;0、搭建开发环境以及项目框架 || 下载编译简化版Sylar&#xff09; 重写Sylar基于协程的服务…

CAN通信----(创芯科技)CAN分析仪----转CANTest使用

点击进入官方链接进行下载创芯科技 CAN分析仪资料包&#xff1a; 创芯科技的官网&#xff1a;https://m.zhcxgd.com/ 我使用的是至尊版红色带OBD转接头的&#xff1a; 所有下图是我选择…

MyBatis一些常见知识点!

什么是 ORM 框架&#xff1f; MyBatis 有哪些优缺点&#xff1f; 典型回答&#xff1a; ORM&#xff08;Object-Relational Mapping&#xff0c;对象关系映射&#xff09;框架是一种将关系型数据库中的数据 与 应用程序中的对象进行映射的技术。它通过在程序代码中定义的类和属…

c语言--assert断言(详解)

目录 一、断言的概念二、assert断言2.1 代码12.1.1运行结果2.1.2分析 2.2代码22.2.1运行结果2.2.2分析2.3代码32.3.1运行结果及其分析 三、优点四、缺点五、注意 一、断言的概念 assert.h 头⽂件定义了宏 assert() &#xff0c;用于在运行时确保程序符合指定条件&#xff0c;如…

酷开系统 | 拓展内容营销边界,酷开科技大屏价值全面升维

丰富的内容是智能大屏吸引消费者的关键。随着智能大屏各类垂直应用的增多&#xff0c;和长、短视频等多元内容的加入&#xff0c;使消费者的使用需求进一步激发和释放&#xff0c;这些流量的加入&#xff0c;也使大屏成为了营销的天然宝藏。酷开科技一直致力于OTT大屏营销&…

9个Linux 查看系统硬件信息命令(实例详解)

在Linux下&#xff0c;我们精要遇到需要查看系统的硬件信息&#xff0c; 这里我罗列了查看系统硬件信息的实用命令&#xff0c;并做了分类&#xff0c;实例解说。 执行环境&#xff1a;ubuntu 16.04 1. cpu lscpu命令&#xff0c;查看的是cpu的统计信息. rootubuntu:/home/…

使用CHATGPT进行论文写作的缺点和风险

为了真正感受 ChatGPT 的写作潜力&#xff0c;让我们先将其与传统的论文写作方法进行一下比较分析 CHATGPT论文写作的缺点和风险 传统论文写作的考验和磨难很深&#xff1a;费力的研究、组织想法和精心设计的逻辑论证&#xff0c;往往以牺牲你的理智为代价。 进入ChatGPT&am…

【复现】WordPress html5-video-player SQL 注入漏洞_39

目录 一.概述 二 .漏洞影响 三.漏洞复现 1. 漏洞一&#xff1a; 四.修复建议&#xff1a; 五. 搜索语法&#xff1a; 六.免责声明 一.概述 在WordPress中播放各种视频文件。一个简单&#xff0c;可访问&#xff0c;易于使用和完全可定制的视频播放器&#xff0c;适用于所…

python_蓝桥杯刷题记录_笔记_全AC代码_入门4

题单目录 1.P1914 小书童——凯撒密码 2.P1028 [NOIP2001 普及组] 数的计算 3.P1036 [NOIP2002 普及组] 选数 4.P1149 [NOIP2008 提高组] 火柴棒等式 5.P1217 [USACO1.5] 回文质数 Prime Palindromes 6.P1478 陶陶摘苹果&#xff08;升级版&#xff09; 7.P1618 三连击&…

go消息队列RabbitMQ - 订阅模式-fanout

1、发布订阅 订阅模式&#xff0c;消息被路由投递给多个队列&#xff0c;一个消息被多个消费者获取。 1&#xff09; 可以有多个消费者 2&#xff09; 每个消费者有自己的queue&#xff08;队列&#xff09; 3&#xff09; 每个队列都要绑定到Exchange&#xff08;交换机&…

c++阶梯之类与对象(中)

目录 1.类的6个默认成员函数 2. 构造函数 2.1 构造函数概念的引出 2.2 构造函数的特性 3. 析构函数 3.1 析构函数的概念 3.2 特性 未使用构造与析构的版本 使用了构造与析构函数的版本 4. 拷贝构造函数 4.1 拷贝构造函数的概念 4.2 特性 结语 本节我们来认识…

使用 PyTorch 构建 NLP 聊天机器人

一、说明 聊天机器人提供自动对话&#xff0c;可以帮助用户完成任务或寻求信息。随着深度学习的最新进展&#xff0c;聊天机器人正变得越来越具有对话性和实用性。这个全面的教程将利用 PyTorch 和 Python 从头开始构建聊天机器人&#xff0c;涵盖模型架构、数据准备、训练循环…

AIGC技术讲解以及应用的落地

简介 近期&#xff0c;火爆的“AI绘画”、图片转AI图&#xff0c;智能聊天软件ChatGPT&#xff0c;引起了人们广泛关注。人工智能潜力再次被证明&#xff0c;而这三个概念均来自同一个领域&#xff1a;AIGC。AIGC到底是什么&#xff1f;为什么如此引人关注&#xff1f;AIGC能产…

Linux ---- Shell编程之免交互

一、Here Document 多行重定向 1、Here Document定义 使用I/O重定向的方式将命令列表提供给交互式程序标准输入的一种替代品Here Document 是标准输 入的一种替代品&#xff0c;可以帮助脚本开发人员不必使用临时文件来构建输入信息&#xff0c;而是直接就地生产出一个文件…

(15)求两个整数的平均值

文章目录 每日一言题目解题思路代码结语 每日一言 现在&#xff0c;我怕的并不是那艰苦严峻的生活&#xff0c;而是不能再学习和认识我迫切想了解的世界。对我来说&#xff0c;不学习&#xff0c;毋宁死。——罗蒙诺索夫 题目 输入两个整数m和n&#xff0c;写一个函数average…

GrayLog踩坑历险记

背景 GrayLog作为ELK的替代产品&#xff0c;是新生代的日志采集框架。在一个采集节点日志的需求中&#xff0c;因为节点很多&#xff0c;产生的日志也很多&#xff0c;因此尝试了使用GrayLog进行日志的采集。下面记录一下使用GrayLog中遇到的坑和解决方案。 一、部署与启动 …

(十三)Java开发扩展之软件包与安装——JDK和MySQL

文章目录 1、RPM1.1、什么是RPM&#xff1f;1.2、RPM包的名称格式1.2.1、RPM查询命令1.2.2、RPM卸载命令1.2.3、RPM安装命令 2、YUM2.1、什么是YUM?2.2、yum安装程序命令 3、安装JDK4、安装MySQL 1、RPM 1.1、什么是RPM&#xff1f; RPM&#xff08;RedHat Package Manager&a…

《学成在线》微服务实战项目实操笔记系列(P1~P49)【上】

《学成在线》项目实操笔记系列【上】&#xff0c;跟视频的每一P对应&#xff0c;全系列12万字&#xff0c;涵盖详细步骤与问题的解决方案。如果你操作到某一步卡壳&#xff0c;参考这篇&#xff0c;相信会带给你极大启发。同时也欢迎大家提问与讨论&#xff0c;我会尽力帮大家解…

阿里面试:Seata如何实现RC?保证事务的隔离性?

尼恩说在前面 在40岁老架构师 尼恩的读者交流群(50)中&#xff0c;最近有小伙伴拿到了一线互联网企业如阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格&#xff0c;遇到很多很重要的面试题&#xff1a; Seata 如何实现 RC &#xff1f;保证事务的隔离性&#xff1…