二叉树的深搜题解析

文章目录

  • 前言
  • 计算布尔二叉树的值
  • 求根节点到叶节点数字之和
    • 解析
    • 代码
  • 二叉树剪枝
    • 解析
    • 代码
  • 验证二叉搜索树
    • 解析
    • 代码
  • 二叉搜索树中第K小的元素
    • 代码
  • 二叉树的所有路径
    • 解析
    • 代码

前言

大家好我是jiantaoyab,在这里分享给大家二叉树深搜相关题目的练习和解析,通过做题发现这树中的递归是非常好找的一般就是前序,中序,后序,为什么叫深搜呢?大家可以看看我第一篇

计算布尔二叉树的值

https://leetcode.cn/problems/evaluate-boolean-binary-tree/

class Solution {
public:bool evaluateTree(TreeNode* root) {//根节点返回valif(root->left == nullptr && root->right == nullptr) return root->val == 0 ? false : true;bool l = evaluateTree(root->left);bool r = evaluateTree(root->right);//知道 l 和 r 的值,返回 | / & 的结果return root->val == 2 ? l | r : l & r ;}
};

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

https://leetcode.cn/problems/3Etpl5/

解析

在这里插入图片描述

在 9 的这个位置下,只要算出它的左子树 和 右子树 的和就能够返回给上一层

递归的终止条件是到了叶子节点,此时返回presum就可以

代码

class Solution {
public:int PreOrder(TreeNode* root, int pre_sum){//当前节点的上一个总和pre_sum = pre_sum * 10 + root->val;//到了叶子返回if(root->left == nullptr && root->right == nullptr) return pre_sum;int ret = 0; //记录结果if(root->left)ret += PreOrder(root->left, pre_sum);if(root->right)ret += PreOrder(root->right, pre_sum);return ret;}int sumNumbers(TreeNode* root) {return PreOrder(root, 0);}
};

二叉树剪枝

https://leetcode.cn/problems/pOCWxh/

解析

在这里插入图片描述

分析这个例题,剪节点要通过后序遍历去操作

那什么时候执行剪呢?

当节点是根节点的且值是0的时候,返回nullptr

代码

class Solution {
public:TreeNode* pruneTree(TreeNode* root) {if(root == nullptr) return nullptr;if(root->left) root->left =  pruneTree( root->left);if(root->right) root->right =  pruneTree( root->right);if(root->val == 0 && root->left == nullptr && root->right == nullptr){           root = nullptr;}return root;}
};

验证二叉搜索树

https://leetcode.cn/problems/validate-binary-search-tree/

解析

我们知道二叉树的中序遍历会把树排成有序的,但是开销的空间太大了,所以不用这种方法,

代码

class Solution {
public:long  prev_root = LONG_MIN; //记录当前节点的上一个节点的值bool isValidBST(TreeNode* root) {if(root == nullptr) return true;bool left = isValidBST(root->left);if(left == false) return false;//判断是不是搜索树//升序就是搜索树bool cur =  false;if(root->val > prev_root)cur = true; //剪枝if(cur == false) return false;      prev_root = root->val;bool right = isValidBST(root->right);return left && right && cur;}
};

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

https://leetcode.cn/problems/kth-smallest-element-in-a-bst/

我们的中序遍历的结果就是升序的,所以题目问第k小的元素,只要用一个计数器等于k,计数器的结果等于0的时候就是第k小的元素

代码

class Solution {int count;int ret;
public:void LDR(TreeNode* root){if(root == nullptr || count == 0) return;LDR(root->left);count--;if(count == 0) ret = root->val;LDR(root->right);}int kthSmallest(TreeNode* root, int k) {count = k;LDR(root);return ret;}
};

二叉树的所有路径

https://leetcode.cn/problems/binary-tree-paths/

解析

在这里插入图片描述

代码


class Solution {vector<string> ret;
public:void dfs(TreeNode* root, string tmp){//不管是不是叶子先放进去tmp += to_string(root->val);//是叶子了,放入retif(root->left == nullptr && root->right == nullptr){ret.push_back(tmp);return;}tmp += "->";//这里2个if包含了剪枝//就是如果左边或者右边没有的话,就不进去了if(root->left)  dfs(root->left, tmp);if(root->right) dfs(root->right, tmp);               }vector<string> binaryTreePaths(TreeNode* root) {if(root == nullptr) return ret;string tmp;dfs(root, tmp);return ret;}
};

right, tmp);
}
vector binaryTreePaths(TreeNode* root) {
if(root == nullptr) return ret;
string tmp;
dfs(root, tmp);
return ret;
}
};

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

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

相关文章

【中国算力大会主办】2024算法、高性能计算与人工智能国际学术会议(AHPCAI 2024)

【中国算力大会主办】2024算法、高性能计算与人工智能国际学术会议&#xff08;AHPCAI 2024&#xff09; 2024 International Conference on Algorithms, High Performance Computing and Artificial Intelligence 2024算法、高性能计算与人工智能国际学术会议&#xff08;AH…

使用java的Stream流进行Collectors.groupingBy分组后生成Map,对Map进行删除原集合是否会发生改变

在Java中&#xff0c;当我们使用Collectors.groupingBy方法对集合进行分组操作时&#xff0c;生成的新映射&#xff08;Map&#xff09;是基于原始集合&#xff08;allItems&#xff09;的数据结构和内容创建的。这意味着&#xff0c;如果你更改了新的映射allItemMap中的值&…

车牌定位识别企业版

车牌定位识别企业版&#xff0c;只需要OPENCV&#xff0c;采用YOLOV8NANO检测车牌区域&#xff0c;然后使用PADDLE OCR检测车牌&#xff0c;能识别各国车牌&#xff0c;支持C,PYTHON开发 车牌定位识别企业版&#xff0c;只需要OPENCV&#xff0c;支持C,python

力扣大厂热门面试算法题 - 动态规划

爬梯子、跳跃游戏、最小路径和、杨辉三角、接雨水。每题做详细思路梳理&#xff0c;配套Python&Java双语代码&#xff0c; 2024.03.05 可通过leetcode所有测试用例。 目录 70. 爬楼梯 解题思路 完整代码 Python Java 55. 跳跃游戏 解题思路 完整代码 Python 代码…

RabbitMQ如何实现消费端限流

什么是消费端限流&#xff0c;这个一种保护消费者的手段&#xff0c;假如说&#xff0c;现在是业务高峰期了&#xff0c;消息有大量堆积&#xff0c;导致MQ消费需要不断的进行消息消费&#xff0c;很容易被打挂&#xff0c;甚至重启之后还是会被大量消息涌入&#xff0c;继续被…

Android APK包反编译为java文件教程

方法 流程&#xff1a; test.apk -> smali文件 -> dex文件 -> jar文件 ->java 文件 将APK包解压为 smail文件 下载 apktool工具 apktool.jar 将 test.apk 和 apktool.jar放同一目录下&#xff0c;并执行以下命令 java -jar apktool.jar d -f xxx.apk -o xxx(解…

Linux Watchdog 机制是什么

当涉及到Linux操作系统的稳定性和可靠性时&#xff0c;Linux Watchdog机制是一个至关重要的议题。该机制旨在监控系统状态&#xff0c;确保在出现问题时采取适当的措施以维持系统的正常运行。本文将深入探讨Linux Watchdog机制的工作原理、应用范围以及如何配置和使用该机制来提…

Ubuntu下安装Scala

前言 弄了一下终于成功装上了&#xff0c;这里对此进行一下总结 安装虚拟机 VMware虚拟机安装Ubuntu&#xff08;超详细图文教程&#xff09;_vmware安装ubuntu-CSDN博客https://blog.csdn.net/qq_43374681/article/details/129248167Download Ubuntu Desktop | Download | …

如何管理系统中的敏感数据?

如何管理系统中的敏感数据&#xff1f; 本文转自 公众号 ByteByteGo&#xff0c;如有侵权&#xff0c;请联系&#xff0c;立即删除 如何在系统中管理敏感数据&#xff1f;下图列出了一系列指导原则。 什么是敏感数据&#xff1f; 个人身份信息 (PII)、健康信息、知识产权、财务…

Nano 33 BLE Sense Rev2学习第一节——环境配置

参考文档见Access Barometric Pressure Sensor Data on Nano 33 BLE Sense | Arduino Documentation 打开Arduino ide安装开发板 选择开发板 连接开发板到电脑&#xff0c;自动识别开发板端口&#xff0c;选择端口

激光炸弹 刷题笔记

前置知识 二维前缀和 子矩阵的和 刷题笔记 {二维前缀和}-CSDN博客 思路 参考二维前缀和 将子矩阵的和 做成动态矩阵 一个个矩阵搜索 符合要求边长 矩阵中的元素和最大值 将x1,y1用i-k,j-k表示即可 x2,y2用i&#xff0c;j表示 代码 #include<iostream> #include<…

挑战与机遇:人工智能领域的关键技术与创新路径

人工智能&#xff08;AI&#xff09;作为当今世界最具活力和前景的领域之一&#xff0c;已经深刻改变了我们的生活和工作方式。然而&#xff0c;尽管AI技术近年来发展迅速&#xff0c;但其核心技术却极其稀缺。在这个领域里&#xff0c;企业们应该把重心放在哪些方面&#xff0…