代码随想录Day15_二叉树

news/2025/11/19 23:35:40/文章来源:https://www.cnblogs.com/ChenYinging/p/19243832

1.平衡二叉树

题目理解:

左子树和右子树的高度差不超过1。
求左子树高度,求右子树高度,如果差1或者0就返回true.至于高度.
不能用求最大深度做,因为最大深度中高度的相加是通过最后1+max() 实现的.
image
题目理解错了,平衡二叉树,说的是所有节点的左子树和右子树的高度差,并非是根节点。在看对称二叉树时,判断的是根节点的左右子树的情况。因此参数一定是节点。

题目思路

不懂为什么要引出高度和深度以及遍历方式?
先三部曲:
1.参数是节点,返回值是高度,int;
2.终止条件:节点空
3.单层循环的逻辑:左右子树的差值。

代码实现

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

2.二叉树的所有路径

题目理解

根节点到叶子经过的所有节点。

思路

对于一个节点,要是有左节点,就输出来,要是有右节点就输出来,直到没有左节点,也没有右节点。用动态数组存。

代码

class Solution {
public:vector<string> binaryTreePaths(TreeNode* root) {vector<int>path;vector<string>result;if(root ==NULL) return result;Tranverse(root,path,result);return result;}
private:void Tranverse(TreeNode* node,vector<int>&path,vector<string> &result){path.push_back(node->val);if(node->left==NULL&&node->right==NULL){string spath;for(int i=0;i<path.size()-1;i++){spath += to_string(path[i]); spath +="->";}spath+=to_string(path[path.size()-1]);result.push_back(spath);//return ;}if(node->left){Tranverse(node->left,path,result);path.pop_back();}if(node->right){Tranverse(node->right,path,result);path.pop_back();}}
};

3.左叶子之和

题目理解

是左叶子!是没有孩子的节点,不是左节点!
叶子节点:如果已经遍历到了叶子节点,那么就不知道它是否是左节点,因此参数是叶子节点的上一个节点。

思路

1.参数 TreeNode node 返回值 int;
2.终止条件:root==NULL;
3.单层循环:遇见左叶子,记录左叶子;

  • 递归求左子树叶子和;
  • 递归求右子树叶子和;
  • 返回和。

代码

class Solution {
public:int sumOfLeftLeaves(TreeNode* root) {return tranverse(root);}int tranverse(TreeNode* node){if(node == NULL) return 0;int leftNum =tranverse(node->left);if(node->left!=0&&node->left->left==NULL&&node->left->right==NULL)leftNum+=node->left->val;//左int rightNum =tranverse(node->right);//右int sum =leftNum+rightNum;//中return sum;}};

3.完全二叉树节点的数量

题目理解

思路

这个递归真是完全不理解,为什么要确定一个终止条件后还要再写一个判断满二叉树,满二叉树是为了简化。

代码

class Solution {
public:int countNodes(TreeNode* root) { return GetNum(root); }
private:int GetNum(TreeNode* node) {if (node == NULL)return 0;int leftDepth = 0;int rightDepth = 0;TreeNode* LeftNode=node->left;while (LeftNode) {LeftNode = LeftNode->left;leftDepth++;}TreeNode* RightNode = node->right;while (RightNode) {RightNode = RightNode->right;rightDepth++;}if(leftDepth == rightDepth) {return (2<<leftDepth)-1;}int leftNum = GetNum(node->left);int rightNum = GetNum(node->right);int sum = leftNum + rightNum+1;return sum;}
};

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

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

相关文章

2025农膜厂商最新top推荐:三光膜/ 大棚膜/水池布优质供应商

随着设施农业的快速发展,农膜、水池布等高分子覆盖材料成为提升作物品质与农业效益的关键。本榜单基于技术创新力、产品效能、地域适配性三大维度,结合农户反馈,深度解析五大农业覆盖材料品牌综合实力,为农户及农业…

什么是代币?从ERC-20开始 - all-in

一、什么是代币(Token) 一句话概括,代币(Token)是由区块链上的智能合约发行的可编程数字资产。二、发行自己的ERC-20代币 ERC-20 是以太坊上最重要的智能合约标准之一,是用于实现同质化代币的智能合约接口。 ERC…

NCHU-OOP-前三次大作业总结 - AC

一、前言(三次大作业概括)第一次大作业覆盖了基础算法(身份证校验位计算)、面向对象入门(一元二次方程类设计)、字符串处理(正则表达式验证)等知识点,以及第一次电梯调度作业; 第二次大作业覆盖了复杂类设计…

Yanhua Mini ACDP-2 BMW CAS Package: Advanced CAS ISN Module Programming for N20/N55/B38

Streamline BMW CAS Repairs & Diagnostics with the Yanhua Mini ACDP-2 Package For European and American automotive professionals and BMW enthusiasts, tackling BMW CAS (Control and Security Module) s…

Ruby 与 Tesseract 实现英文数字验证码识别

验证码是一种常见的防机器人机制,其中英文数字混合验证码广泛出现在登录、注册等界面。本文将展示如何使用 Ruby 语言编写一个验证码识别程序,借助 Tesseract OCR 引擎来提取图像中的文本。 一、环境准备安装 Ruby 更…

NCHU-OO-前三次大作业总结 - AC

一、前言(三次大作业概括)第一次大作业覆盖了基础算法(身份证校验位计算)、面向对象入门(一元二次方程类设计)、字符串处理(正则表达式验证)等知识点,以及第一次电梯调度作业; 第二次大作业覆盖了复杂类设计…

Postman关于AES的加解密

Postman 绝对是软件测试工程师做接口联调、测试的必备工具。虽然实际工作中,团队可能会用到 JMeter、Apifox、Apipost、Burp Suite 等不同工具,但 Postman 凭借通用性强的优势,成为连接开发、测试、CTC(持续测试 /…

汉诺塔问题详解

《具体数学》第一章习题 12 bonus: 有柱子 A,B,C, 有 \(m_i\) 个半径为 \(i\) 的碟子,规定时刻大碟子不能在小的碟子上方,初始碟子都在柱 A,每次操作将一个柱子最上面碟子挪到另一个柱子最上面,末态柱子按原顺序(…

发布与订阅者模式-复盘

背景传统点对点调用让服务之间像蜘蛛网一样缠绕:一次改动,全网抖动。 发布-订阅(Pub/Sub)通过Broker把“谁发”与“谁收”彻底解耦,将调用关系转化为“主题-订阅”声明式关系,成为现代微服务、实时推送、事件驱动…

20232307 2025-2026-1 《网络与系统攻防技术》实验七实验报告

20232307 2025-2026-1 《网络与系统攻防技术》实验七实验报告 1.实验内容及要求 本实践的目标理解常用网络欺诈背后的原理,以提高防范意识,并提出具体防范方法。具体实践有 (1)简单应用SET工具建立冒名网站 (2)e…

《R语言医学数据分析实战》学习记录--第一章 R语言介绍

第一章 R语言介绍 内容记录 R和python很类似,可以通过对比python与R的区别进行学习,尤其对R中独有或有区别的部分,做特殊记录和学习。 有几个功能为R中特别处理:工作目录管理:通过getwd()获得当前工作目录,通过s…

251119明天就要去适应比赛场地了

我们学习室真绝了,上午没人来,晚上九点之后就关门了。 当然了,我九点之后又去了 读英文的东西真痛苦,啥时候才能无痛直接阅读啊啊啊啊。还是要加油吧, 今晚去随便打了打,保持一下手感,有的老大叔真不讲究,一来…

【数据结构】哈希表的理论与实现 - 教程

【数据结构】哈希表的理论与实现 - 教程2025-11-19 23:11 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block …

在阿里云上部署Redis

首先确定一个下载目录:cd /user #进入usr文件夹 mkdir redis #创建redis文件包下载redis安装包:wget http://download.redis.io.release.redis-6.0.1.tar.gz #获取redis安装包解压安装包tar -xzvf redis-6.0.1.tar.gz …

pip安装第三方包

https://pypi.tuna.tsinghua.edu.cn/simple

李克特量表(Likert scale)

李克特量表(Likert scale)是社会科学和市场研究中最常用的一种量表形式,用于衡量态度、意见或感知等心理变量。 核心特点对称与平衡: 量表通常是对称且平衡的,即积极和消极的选项数量相等,中间有一个中性点。 等…

java---maven

java及maven: 前提是已经安装了java:下载maven:https://maven.apache.org/然后下载:https://maven.apache.org/download.cgi找到下载:下载安装,然后放到一个没有中文路径的文件夹里面,然后配置环境变量: 搜索【…

新来的外包,在大群分享了它的限流算法的实现

1. 令牌桶按用户维度限流 前文golang/x/time/rate演示了基于整体请求速率的令牌桶限流; 那基于用户id、ip、apikey请求速率的限流(更贴近生产的需求), 阁下又该如何应对? 那这个问题就从全局速率变成了按照用户维度…

用 Rust 与 Tesseract 进行英文数字验证码识别

Rust 是一门注重性能与安全的系统编程语言,越来越多用于图像处理和自动化领域。本文将介绍如何使用 Rust 调用 Tesseract 引擎,实现简单的英文数字验证码识别。 更多内容访问ttocr.com或联系1436423940 一、开发准备…