代码随想录 | day 15 | 二叉树part03

完全二叉树的节点个数

方法一:可以用递归法遍历一遍左子树和右子树的个数之和再加1等于全部节点个数

class Solution {
public:int getcount(TreeNode* cur){if(cur==NULL) return 0;int leftcount = getcount(cur->left);int rightcount = getcount(cur->right);return leftcount + rightcount + 1;}int countNodes(TreeNode* root) {return getcount(root);}
};
//写法2:
class Solution {
public:int countNodes(TreeNode* root) {if(root==NULL) return 0;int leftCount = countNodes(root->left);int rightCount = countNodes(root->right);return leftCount + rightCount + 1;}
};

方法二:用层序遍历方式遍历一遍所有节点

class Solution {
public:int countNodes(TreeNode* root) {queue<TreeNode*>que;if(root==NULL) return 0;que.push(root);int count = 0;while(!que.empty()){int size = que.size();for(int i=0; i<size; i++){TreeNode* node = que.front();que.pop();count++;if(node->left) que.push(node->left);if(node->right) que.push(node->right);}}return count;}
};

平衡二叉树

判断左子树和右子树是不是高度相差1,用-1来表示不是平衡二叉树
用递归遍历的方式来解决

class Solution {
public:int getHeight(TreeNode* cur){if(cur==NULL) return 0;int leftHeight = getHeight(cur->left);if(leftHeight==-1) return -1;int rightHeight = getHeight(cur->right);if(rightHeight==-1) return -1;return abs(leftHeight-rightHeight) > 1 ? -1 : max(leftHeight,rightHeight)+1;}bool isBalanced(TreeNode* root) {return getHeight(root) == -1 ? false : true;}
};

在这里插入图片描述
我可以去掉max(leftHeight,rightHeight)吗???
在当前代码逻辑中,max(leftHeight, rightHeight) + 1 这部分是必须的,不能去掉。这是因为:

计算树的高度:max(leftHeight, rightHeight) + 1 的目的是计算当前节点的高度。这是标准的递归方式,左右子树的高度最大值加1,代表了当前节点的高度。如果去掉这部分,函数将无法正确计算树的高度,这会影响到是否平衡的判断。递归的基础:在递归过程中,每个节点的高度依赖于它的左右子树的高度。max(leftHeight, rightHeight) + 1 确保了递归向上传播时,每层都能正确反映子树的高度,从而可以正确判断平衡性。平衡判断依赖高度:代码依赖高度差来判断平衡性。虽然直接的平衡判断是通过 abs(leftHeight - rightHeight) > 1 来实现的,但整体高度的递归更新依赖 max(leftHeight, rightHeight) + 1。如果去掉这部分,无法准确获取节点的高度差,从而影响对平衡性的判断。

总结来说,max(leftHeight, rightHeight) + 1 是递归计算高度和判断平衡性的一部分,去掉它会导致无法正确计算节点高度,也就无法正确判断树是否平衡。因此,这部分代码是必须保留的。

二叉树的所有路径

左叶子之和

  1. 递归方法
    通过叶子节点的父节点来访问叶子节点
class Solution {
public:int sumOfLeftLeaves(TreeNode* root) {if(root==NULL) return 0;if(root->left==NULL && root->right==NULL) return 0;int leftValue = sumOfLeftLeaves(root->left);if(root->left && !root->left->left && !root->left->right){leftValue = root->left->val;}int rightValue = sumOfLeftLeaves(root->right);return leftValue + rightValue;}
};
  1. 层序遍历
    依然是遍历每一个节点,并用父节点来判断左节点是否为叶子节点
class Solution {
public:int sumOfLeftLeaves(TreeNode* root) {queue<TreeNode*>que;if(root==NULL) return 0;que.push(root);int sum = 0;while(!que.empty()){int size = que.size();while(size--){TreeNode* node = que.front();que.pop();if(node->left && !node->left->left && !node->left->right){sum+=node->left->val;}if(node->left) que.push(node->left);if(node->right) que.push(node->right);}}return sum;}
};

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

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

相关文章

以简单的例子从头开始建spring boot web多模块项目(四)-多模块工具类

目的是为了验证主工程调用工具工程。 1、新建模块&#xff0c;名称为WebTool 同样为Maven Archetype&#xff0c;类型为 org.apache.maven.archetypes:maven-archetype-quickstart 2、修改pom.xml 增加spring-boot-starter的依赖。 <dependency><groupId>org.spri…

【科研绘图】【分条热力图】:附Origin详细画图流程 + 案例分析

目录 No.1 理解分条热力图 No.2 画图流程 1 导入数据&#xff0c;绘制图形 2 设置绘图细节 3 色阶控制 4 设置坐标轴 5 效果图 No.3 案例分析 1 案例一 2 案例二 No.1 理解分条热力图 分条热力图&#xff0c;基于数据映射和颜色编码&#xff0c;是在热力图的基础上进…

【Hot100】LeetCode—437. 路径总和 III

目录 1- 思路前缀和哈希表dfs 2- 实现⭐437. 路径总和 III——题解思路 3- ACM 实现 题目连接&#xff1a;437. 路径总和 III 1- 思路 前缀和哈希表dfs ① 前缀和 求二叉树的前缀和&#xff0c;每求一次用一个 sum 传参记录更新 ② 哈希表 key 为前缀和 &#xff0c;value…

RISCV汇编编程讲解

第一章 引言 为什么要讲riscv&#xff1f; riscv的特点&#xff1a; -诞生于顶尖学术机构&#xff1a;诞生于加州大学伯克利分校的体系结构研究院。吸引了大批的顶尖企业参与&#xff08;e.g. 谷歌、华为、高通、阿里巴巴为rsicv的发展提供了大量的资金支持和贡献了技术和人才…

Oracle Linux 7.9 安装minikube体验

1.环境信息 前置所需&#xff1a; 操作系统&#xff1a;Oracle Linux 7.9 虚拟机配置&#xff1a;CPU:4核 内存&#xff1a;4G 容器&#xff1a;docker 26.1.4 安装minikube后环境&#xff1a; minikube: v1.33.1 kubernetes:v1.23.3 minukube体验说明&#xff1a;使用Virtua…

flume--数据从kafka到hdfs发生错误

解决&#xff1a; #1.将flume自带的依赖删除 mv /opt/installs/flume1.9/lib/guava-11.0.2.jar /opt/installs/flume1.9/lib/guava-11.0.2.jar.bak #2.将hadoop的依赖发送到flume下 cp /opt/installs/hadoop3.1.4/share/hadoop/common/lib/guava-27.0-jre.jar /opt/installs/f…

【C++ Primer Plus习题】5.9

问题: 解答: #include <iostream> #include <cstring> using namespace std;#define SIZE 20int main() {string words[SIZE];string done "done";int count 0;while (true){cout << "请输入单词:" << endl;cin >> words…

中国发布首个AI集成Linux开源操作系统

B站&#xff1a;啥都会一点的研究生公众号&#xff1a;啥都会一点的研究生 AI圈最近又发生了啥新鲜事&#xff1f; 中国大模型市场迎来新格局&#xff1a;百度、商汤、智谱位列前三 国际数据公司&#xff08;IDC&#xff09;于首次发布了《中国大模型平台市场份额&#xff0…

NYX靶机笔记

NYX靶机笔记 概述 VulnHub里的简单靶机 靶机地址&#xff1a;https://download.vulnhub.com/nyx/nyxvm.zip 1、nmap扫描 1&#xff09;主机发现 # -sn 只做ping扫描&#xff0c;不做端口扫描 nmap -sn 192.168.84.1/24 # 发现靶机ip为 MAC Address: 00:50:56:E0:D5:D4 (V…

适用于应用程序安全的 11 大 DevSecOps 工具

DevSecOps&#xff08;开发者安全运营&#xff09;是指将安全最佳实践融入软件开发生命周期的过程&#xff0c;从而实现更好的安全结果。这是提供全面安全基础设施的重要方面。 市场格局&#xff1a;DevSecOps市场竞争激烈。该领域有数百家供应商提供工具&#xff0c;帮助组织…

虚幻5|AI行为树,跟随task(非行为树AI)

这个可以不需要行为树 1.打开ai的角色蓝图后&#xff0c;添加一个函数&#xff0c;命名为跟距离改变速度 并用tick调用 2.编辑函数

在VBA中调用Adobe Acrobat或Reader的命令行工具,实现PDF自动打印 (‾◡◝)

在VBA&#xff08;Visual Basic for Applications&#xff09;中自动打印PDF文件通常不直接支持&#xff0c;因为VBA本身是针对Microsoft Office应用程序&#xff08;如Excel、Word和PowerPoint等&#xff09;的编程语言&#xff0c;并不直接处理PDF文件。但是&#xff0c;你可…

【变化检测】基于Tinycd建筑物(LEVIR-CD)变化检测实战及ONNX推理

主要内容如下&#xff1a; 1、LEVIR-CD数据集介绍及下载 2、运行环境安装 3、Tinycd模型训练与预测 4、Onnx运行及可视化 运行环境&#xff1a;Python3.8&#xff0c;torch1.12.0cu113 likyoo变化检测源码&#xff1a;https://github.com/likyoo/open-cd 使用情况&#xff1a…

学习文件IO,让你从操作系统内核的角度去理解输入和输出(Java实践篇)

本篇会加入个人的所谓鱼式疯言 ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. &#x1f92d;&#x1f92d;&#x1f92d;可能说的不是那么严谨.但小编初心是能让更多人…

经验之谈 —— 数据处理与分析的6大Python库

点击下方卡片&#xff0c;关注“小白玩转Python”公众号 Python是一种流行的高级编程语言。它拥有丰富的生态系统和庞大的社区。这个生态系统中有许多优秀的Python库。这些库提供了有用的工具&#xff0c;使开发变得更加容易。本文将介绍6个出色的Python库。这些库在不同领域都…

数据结构初阶(2)——链表OJ

目录 1.面试题 02.02. 返回倒数第 k 个节点 2.OR36 链表的回文结构 3.160. 相交链表 1.面试题 02.02. 返回倒数第 k 个节点 思路&#xff1a;快慢指针&#xff0c;快指针先走k格&#xff0c;慢指针同步 /*** Definition for singly-linked list.* struct ListNode {* i…

android13 隐藏状态栏里面的飞行模式 隐藏蓝牙 隐藏网络

总纲 android13 rom 开发总纲说明 目录 1.前言 2.问题分析 3.代码分析 4.代码修改 5.编译运行 6.彩蛋 1.前言 android13 隐藏状态栏里面的飞行模式,或者其他功能,如网络,蓝牙等等功能,隐藏下图中的一些图标。 2.问题分析 这里如果直接找这个布局的话,需要跟的逻…

[数据集][目标检测]电力场景输电线杆塔塔架金属锈蚀腐蚀生锈检测数据集VOC+YOLO格式1344张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;1344 标注数量(xml文件个数)&#xff1a;1344 标注数量(txt文件个数)&#xff1a;1344 标注…

(南京观海微电子)——直流电源使用介绍

什么是稳压电源&#xff1f;直流稳压电源使用方法教程 在电子技术领域中&#xff0c;稳压电源扮演着举足轻重的角色。那么&#xff0c;究竟什么是稳压电源呢&#xff1f;稳压电源是一种能够提供稳定输出电压的电子装置&#xff0c;其核心功能是在输入电压波动或负载变化的情况…

i.MX6裸机开发(9):CCM时钟控制模块

本章参考资料&#xff1a;《IMX6ULRM》&#xff08;参考手册&#xff09;。 学习本章时&#xff0c;配合《IMX6ULRM》第18章Clock Controller Module (CCM)&#xff0c;效果会更佳&#xff0c;特别是涉及到寄存器说明的部分。 本章我们主要讲解时钟部分&#xff0c;芯片内部的…