二叉树深搜专题篇

目录
计算布尔二叉树的值
求根节点到叶节点数字之和
二叉树剪枝
验证二叉搜索树
二叉搜索树中第K小的元素
二叉树的所有路径
计算布尔二叉树的值
题目



思路
这道题其实是比较简单的,对二叉树来一次后序遍历即可,当遇到叶子结点直接返回叶子节点中的bool值即可,否则继续进行后序遍历,返回得到的左子树和右子树的计算结果。
代码
class Solution {
public:bool evaluateTree(TreeNode* root) {if(root->left==nullptr) return root->val==0?false:true;bool left=evaluateTree(root->left);bool right=evaluateTree(root->right);return root->val==2?left|right:left&right;}
};
求根节点到叶节点数字之和
题目



思路
这道题所说的求根节点到叶节点数字之和,并非是求根节点到叶节点所有数字直接相加起来,而是将从根节点到叶节点路径上前一个位置的数字乘10+该位置的值,然后将所有从根节点到叶节点所有路径上的和相加起来。
直接来一次DFS即可,如果当前节点没有左孩子和右孩子,说明当前节点是叶节点,直接返回前一个位置的数字乘10+该位置的值即可,否则,DFS计算该节点左孩子那一侧得到的路径值以及该节点右孩子那一侧得到的路径值,然后返回二者之和即可。
代码
class Solution {
public:int sumNumbers(TreeNode* root) {return dfs(root,0);}int dfs(TreeNode* root,int val){val=val*10+root->val;if(root->left==nullptr &&root->right==nullptr)return val;int ret=0;if(root->left) ret+=dfs(root->left,val);if(root->right) ret+=dfs(root->right,val);return ret;}
};
二叉树剪枝
题目


思路
题目中的描述“返回溢出所有不包含1的子树的原二叉树”,意思是剪掉不包含1的二叉树,如何判定某个位置是否应该被剪掉,来一次后序遍历即可,即先判断该位置左子树是否不包含1,以及该位置右子树是否不包含1,如果该位置左右子树都不包含1且该位置的值是0,那么就剪掉以该位置为根节点的子树,当遇到节点值是空时,直接返回空即可。
代码
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)root=nullptr;return root;}
};
验证二叉搜索树
题目


思路
我们可能会想到对二叉树来一次中序遍历,将中序遍历的结果存放到一个数组中,然后判断数组是否是升序的,因为对二叉搜索树进行中序遍历得到的结果是升序的,但是这样有些浪费空间,我们可以对二叉树进行中序遍历,使用一个变量prev记录中序遍历的前一个位置的值,每次到一个非空节点,判断该节点是否大于中序遍历前一个位置的值,如果大于,继续进行中序遍历,并更新prev的值为当前位置的值;否则直接返回false。其中prev事先初始化为LONG_MIN,因为这道题的节点值可能是INT_MIN。如果当前位置,当前位置的左子树,当前位置的右子树符合二叉搜索树的特点,返回true。
代码
class Solution {long prev=LONG_MIN;
public: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)cur=true;//剪枝if(cur==false) return false;prev=root->val;bool right=isValidBST(root->right);return left && cur && right;}
};
二叉搜索树中第K小的元素
题目


思路
我们可能会想到遍历二叉搜索树,然后将所有节点的值添加到优先级队列中,然后就能够找到二叉搜索树中第K小的元素了,但是这样有些麻烦,不妨利用二叉搜索树的性质,对二叉树进行中序遍历,使用一个变量来记录当前位置是位于中序遍历的第几个位置,当正好是中序遍历的第K的位置,那么该位置的值就是二叉搜索树中第K小的元素。
代码
class Solution {int count,ret;
public:int kthSmallest(TreeNode* root, int k) {count=k;dfs(root);return ret;}void dfs(TreeNode* root){if(root==nullptr || count==0) return;dfs(root->left);count--;if(count==0) ret=root->val;dfs(root->right);}
};
二叉树的所有路径
题目


思路
这道题还是比较简单的,对二叉树进行一次DFS即可,当处理到叶节点的时候,直接返回得到的路径;否则,递归处理该位置左子树的路径以及该位置右子树的路径。
代码
class Solution {vector<string> ret;
public:vector<string> binaryTreePaths(TreeNode* root) {string path;dfs(root,path);return ret;}void dfs(TreeNode* root,string path){path+=to_string(root->val);if(root->left==nullptr && root->right==nullptr){ret.push_back(path);return;}path+="->";if(root->left) dfs(root->left,path);if(root->right) dfs(root->right,path);}
};
相关文章:
二叉树深搜专题篇
目录 计算布尔二叉树的值 求根节点到叶节点数字之和 二叉树剪枝 验证二叉搜索树 二叉搜索树中第K小的元素 二叉树的所有路径 计算布尔二叉树的值 题目 思路 这道题其实是比较简单的,对二叉树来一次后序遍历即可,当遇到叶子结点直接返回叶子节点中…...
堆【数据结构C语言版】【 详解】
目录-笔记整理 一、思考二、堆概念与性质三、堆的构建、删除、添加1. 构建2. 删除3. 添加 四、复杂度分析4.1 时间复杂度4.2 空间复杂度 五、总结 一、思考 设计一种数据结构,来存放整数,要求三个接口: 1)获取序列中的最值&#…...
初识React
在最新写需求的时候,我遇到了一个需求,这个需求改后端改的不算多,而且也比较简单,但是在改前端的时候,很复杂。因为我们这个项目用的是React做前端的,而我对于前端知识没有了解,所以理解很多代码…...
VUE 开发——AJAX学习(三)
一、async函数和await async和await关键字让我们可以用一种更简洁的方式写出基于Promise的异步行为,而无需刻意地链式调用Promise async写在函数声明的前面;在async函数内,使用await关键字,获取Promise对象“成功状态”结果值 &…...
C++杂项
作业: 将之前实现的顺序表、栈、队列都更改成模板类 顺序表 #include <iostream>using namespace std;template<typename T>class SeqList { private:T *ptr;int size; //总长度int len 0; //当前顺序表实际长度public://初始…...
Gelatinous Cube Sphere - Bonus Files 2 - Atavism
这是Gelatinous Cube & Sphere Pack的奖励文件包。 奖励文件: ⭐ 概念艺术 也可在Monster Bundle #2中使用。 下载:Unity资源商店链接资源下载链接...
锐捷—NAT地址映射+IPsec隧道
任务目标 在出口路由器R3上将R5私网地址1对1映射的公网地址与R1建立IPsec隧道,使得R4在访问R5的映射公网地址时,可以进行IPsec隧道的转发 要求: 1、R4和R5可通过NAT转换正常访问互联网地址(R2的lo0) 2、R5的私网地…...
index.html 调用 ajax
index.html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>AJAX 请求示例</title><script>// 封装 Ajax 为公共函数:传入回调函数 success 和 failfunction myAjax (url, suc…...
uniapp学习(003-1 vue3学习 Part.1)
零基础入门uniapp Vue3组合式API版本到咸虾米壁纸项目实战,开发打包微信小程序、抖音小程序、H5、安卓APP客户端等 总时长 23:40:00 共116P 此文章包含第11p-第p14的内容 文章目录 vue3使用介绍插值表达式例子时间戳随机数输出函数的值 ref响应式数据变量v-bind 绑…...
计算机毕业设计 基于深度学习的短视频内容理解与推荐系统的设计与实现 Python+Django+Vue 前后端分离 附源码 讲解 文档
🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…...
JavaScript网页设计案例深度解析:从理论到实践
前言 在现代前端开发中,JavaScript 是赋予网页生命的关键技术。静态的 HTML 和 CSS 虽然能创建美观的页面,但当我们需要增强用户交互和页面响应时,JavaScript 无疑成为最得力的工具。从程序员的角度来看,JavaScript 设计不仅仅是…...
spark-sql建表数据同步到hive
1、基础环境 组件版本备注hadoop3.4.0官方下载hive3.1.3自编译sparkspark-3.5.3-bin-hadoop3官方下载,需要内置hive的jar相关内容paimon0.9.0Maven官方下载jdk1.8.0_41maven3.9.6固定版本 2、停止服务、清理日志 先停止,清理数据 sudo kill -9 $(ps -ef…...
Django上下文处理器
1创建 (如frontend目录下)category_processors文件: def categories(request):from backend.models import Categorycategory_list Category.objects.all()return {category_list:category_list}这里,必须返回一个字典。 2&…...
旭升集团携手纷享销客,构建全方位客户关系管理平台
宁波旭升集团股份有限公司(以下简称“旭升集团”)自2003年成立,总部位于中国宁波,集团设有压铸、锻造、挤压、集成四大事业部,在亚洲、欧洲、美洲等地均设立研发中心及制造基地,产品主要覆盖新能源汽车的电…...
uniapp 知识点
自定义导航 在page.json navigationstyle":"custom"navigateTo传参 页面传参只能onLoad(option)里面拿 px和upx的关系 在750设计图中,1px1upx 路由 navigateBack返回上一页 重定向 其实就是把当前页面干掉了 公共组件和页面共同点 computed,watc…...
慢病中医药膳养生食疗管理微信小程序、基于微信小程序的慢病中医药膳养生食疗管理系统设计与实现、中医药膳养生食疗管理微信小程序的开发与应用(源码+文档+定制)
博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…...
解决 Android WebView 无法加载 H5 页面常见问题的实用指南
目录 1. WebView 简介 2. 常见问题 3. 网络权限设置 4. 启用 JavaScript 5. DOM Storage 的重要性 6. 处理 HTTPS 问题 7. 设置 WebViewClient 8. 调试工具 9. 其他调试技巧 10. 结论 相关推荐 1. WebView 简介 Android WebView 是一种视图组件,使得 And…...
Ollama本地部署大模型及应用
文章目录 前言一、下载安装1.Mac2.Windows3.linux4.docker5.修改配置(可选)1.linux系统2.window 系统3.mac系统 二、Ollama使用1.命令2.模型下载3.自定义模型4.API 服务 三、Open WebUI 使用四、Dify使用 前言 Ollama 是一个专注于本地部署大型语言模型…...
读代码UNET
这个后面这个大小怎么算的,这参数怎么填,怎么来的? 这是怎么看怎么算的? 这些参数设置怎么设置?卷积多大,有什么讲究?...
【java】前端RSA加密后端解密
目录 1. 说明2. 前端示例3. 后端示例3.1 pom依赖3.2 后端结构图3.3 DecryptHttpInputMessage3.4 ApiCryptoProperties3.5 TestController3.6 ApiCryptoUtil3.7 ApiDecryptParamResolver3.8 ApiDecryptRequestBodyAdvice3.9 ApiDecryptRsa3.10 ApiCryptoProperties3.11 KeyPair3…...
AI辅助下的走马观碑:让智能体自动优化你的任务管理应用逻辑
今天想和大家分享一个特别实用的开发经验——如何用AI给任务管理应用"开外挂"。最近在做一个待办事项应用时,我发现单纯的手动输入任务实在太原始了,于是尝试用AI来增强功能,效果出乎意料的好。 智能任务分析功能 传统的任务管理…...
STM32F103 LoRa物理层驱动库详解与工程实践
1. 项目概述LoRa_STM32 是一个面向 STM32F103CB 微控制器平台的 LoRa 通信库,本质是 sandeepmistry/arduino-LoRa 库在 STM32 平台上的适配分支。它并非独立开发的全新协议栈,而是通过 Arduino Core for STM32(rogerclarkmelbourne/Arduino_S…...
嵌入式Linux开发必备远程连接工具详解
1. 嵌入式Linux开发常用远程连接工具技术解析1.1 远程连接工具在嵌入式开发中的重要性嵌入式Linux开发过程中,开发人员经常需要远程访问目标设备进行调试、文件传输或系统监控。由于嵌入式设备通常资源有限且缺乏本地交互界面,远程连接工具成为开发流程中…...
手把手教你用ESP8266 AT指令连接华为云IoT(附固件烧录与MQTT避坑指南)
从零玩转ESP8266:华为云IoT连接实战与深度排错指南 当你第一次拿到那块拇指大小的ESP8266模块时,可能不会想到这个售价不到20元的Wi-Fi芯片能成为物联网世界的通行证。作为全球使用量最大的IoT连接方案之一,ESP8266配合华为云物联网平台&…...
SubtitleOCR:重新定义视频内容处理效率的硬字幕提取革命
SubtitleOCR:重新定义视频内容处理效率的硬字幕提取革命 【免费下载链接】SubtitleOCR 快如闪电的硬字幕提取工具。仅需苹果M1芯片或英伟达3060显卡即可达到10倍速提取。A very fast tool for video hardcode subtitle extraction 项目地址: https://gitcode.com/…...
WSABuilds GitHub Actions构建流程解析:自动化CI/CD管道配置
WSABuilds GitHub Actions构建流程解析:自动化CI/CD管道配置 【免费下载链接】WSABuilds Run Windows Subsystem For Android on your Windows 10 and Windows 11 PC using prebuilt binaries with Google Play Store (MindTheGapps) and/or Magisk or KernelSU (ro…...
zotero-style:智能文献管理在学术研究中的创新实践
zotero-style:智能文献管理在学术研究中的创新实践 【免费下载链接】zotero-style zotero-style - 一个 Zotero 插件,提供了一系列功能来增强 Zotero 的用户体验,如阅读进度可视化和标签管理,适合研究人员和学者。 项目地址: ht…...
【实战指南】如何用nvitop解决GPU资源监控与管理难题
【实战指南】如何用nvitop解决GPU资源监控与管理难题 【免费下载链接】nvitop An interactive NVIDIA-GPU process viewer and beyond, the one-stop solution for GPU process management. 项目地址: https://gitcode.com/gh_mirrors/nv/nvitop 在深度学习训练、科学计…...
手把手教你用readelf解析DWARF栈信息(含常见错误排查)
深入解析DWARF栈信息:从readelf实战到疑难排查 调试二进制文件时,栈信息的解析往往是定位问题的关键。当程序崩溃或异常时,理解调用栈的状态不仅能帮助我们快速定位问题,还能揭示更深层次的运行机制。本文将带你深入探索如何利用r…...
超级AI数字员工源码系统,支持贴牌OEM,独立部署交付
温馨提示:文末有资源获取方式最近“龙虾AI”概念很火,到处都在讨论。但说实话,这类技术对普通用户而言存在明显门槛,部署要代码、配置要工程师、日常运行的Token成本也不低——轻度使用每月100-200元,重度甚至单日上千…...
