代码随想录 | Day18 | 二叉树:完全二叉树的节点个数平衡二叉树

代码随想录 | Day18 | 二叉树:完全二叉树的节点个数&&平衡二叉树

主要学习内容:

1.完全二叉树的性质,满二叉树的节点数量的计算

2.树的高度和深度问题要用后序遍历更加合适

222.完全二叉树的节点个数

222. 完全二叉树的节点个数 - 力扣(LeetCode)

解法一:直接遍历

前序遍历

class Solution {
public:int res;void r(TreeNode *t){if(t==nullptr)return;res++;r(t->left);r(t->right);}int countNodes(TreeNode* root) {res=0;r(root);return res;}
};

和求深度一样的后序遍历

class Solution {
public:int r(TreeNode *t){if(t==nullptr)return 0;//统计左子树结点个数int left=r(t->left);//统计右子树int right=r(t->right);//左右子树和加上本节点int res=1+left+right;return res;}int countNodes(TreeNode* root) {return r(root);}
};

解法二:利用完全二叉树的性质

如果是一颗满二叉树的话,节点数量=2^树的深度-1

如果是一颗完全二叉树的话,一直递归总可以找到满二叉树

20201124092634138

先让左右指针都向下遍历,求出本棵树的左边深度和右边深度,两者如果一样就可以用满二叉树的公式计算本节点的子树的节点数量

因为它是完全二叉树,所以左右指针求出的两个深度相等的话,那它一定是满二叉树

		if(t==nullptr)return 0;TreeNode *left=t->left;TreeNode *right=t->right;int l=0,r=0;while(left){l++;left=left->left;}while(right){r++;right=right->right;}if(l==r)return (2<<l)-1;

如果是满二叉树那就用公式求出深度

        if(l==r)return (2<<l)-1;

如果不是的话就要继续遍历左子树和右子树,将两者数量相加再加1就是所有的节点数量

        int ll=tr(t->left);int rr=tr(t->right);int res=ll+rr+1;return res;

20220829163554

20220829163709

完整代码:

class Solution {
public:int tr(TreeNode *t){if(t==nullptr)return 0;TreeNode *left=t->left;TreeNode *right=t->right;int l=0,r=0;while(left){l++;left=left->left;}while(right){r++;right=right->right;}if(l==r)return (2<<l)-1;int ll=tr(t->left);int rr=tr(t->right);int res=ll+rr+1;return res;}int countNodes(TreeNode* root) {return tr(root);}
};

110.平衡二叉树

110. 平衡二叉树 - 力扣(LeetCode)

由前面的做题经验,我们要得到树的高度来进行高度差的计算,那么肯定会使用的是后序遍历了,因为要使用下层的结果来进行运算

而递归函数的返回值代表的就是本棵树是否是平衡二叉树,-1代表不是,如果是平衡二叉树,则返回的是该子树的最大深度,以便于返回给上层函数后进行比较和运算

1.函数参数和返回值

int r(TreeNode *t)

2.终止条件

为空的结点的高度自然为0

if(t==nullptr)return 0;

3.本层逻辑

如果左边是-1说明左子树不是平衡二叉树

则该子树也不是,右子树同理

如果左右子树都平衡但是两者的最大深度只差大于1,那么本子树也不是平衡二叉树

小于1的话就说明三个条件都符合,本子树为二叉平衡树

		int left=r(t->left);if(left==-1)return -1;int right=r(t->right);if(right==-1)return -1;if(abs(left-right)>1)return -1;elsereturn 1+max(left,right);

完整代码:

class Solution {
public:int r(TreeNode *t){if(t==nullptr)return 0;int left=r(t->left);if(left==-1)return -1;int right=r(t->right);if(right==-1)return -1;if(abs(left-right)>1)return -1;elsereturn 1+max(left,right);}bool isBalanced(TreeNode* root) {if(r(root)==-1)return false;return true;}
};

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

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

相关文章

MT2096 数列分段

代码&#xff1a; #include <bits/stdc.h> using namespace std; const int N 1e5 10; int n, m; int a[N]; int ans 1; int main() {cin >> n >> m;for (int i 1; i < n; i)cin >> a[i];int num 0;for (int i 1; i < n; i){if (num a[i…

【QT】记录一次QT程序发布exe过程

记录一次QT程序发布exe过程 使用windeploy与enigma发布独立的QT程序第一步 QT编译输出 **release** 版本第二步 QT 自带 windepoyqt 补全链接库第三步 enigma virtual box压缩打包为单一exe最后【2024-06-07 17】- 【补充】 贴一个自己用的bat脚本【**QtDeploy2exe.bat**】半自…

6月11号作业

思维导图 #include <iostream> using namespace std; class Animal { private:string name; public:Animal(){}Animal(string name):name(name){//cout << "Animal&#xff1b;有参" << endl;}virtual void perform(){cout << "讲解员的…

WordPress——Argon主题美化

文章目录 Argon主题美化插件类类别标签页面更新管理器文章头图URL查询监视器WordPress提供Markdown语法评论区头像设置发信设置隐藏登陆备份设置缓存插件 主题文件编辑器页脚显示在线人数备案信息(包含备案信息网站运行时间)banner下方小箭头滚动效果站点功能概览下方Links功能…

Spring Boot入门

目录 前言 1.安装Spring Boot Help插件 1.1查找插件并下载 2.2安装插件 2.Idea创建SpringBoot项⽬ 3.其他方式创建SpringBoot项⽬ 3.1 Spring 官网创建 3.2 阿里云创建 3.3 不基于任何页面&#xff0c;插件进行创建 4.⽬录介绍 5.项目启动 5.1项目启动前可能会遇到…

统计绘图 | 既能统计分析又能可视化绘制的技能

在典型的探索性数据分析工作流程中&#xff0c;数据可视化和统计建模是两个不同的阶段&#xff0c;而我们也希望能够在最终的可视化结果中将相关统计指标呈现出来&#xff0c;如何让将两种有效结合&#xff0c;使得数据探索更加简单快捷呢&#xff1f;今天这篇推文就告诉你如何…

Nginx 网站服务

一.Nginx 概述 1.一款高性能、轻量级Web服务软件 稳定性高 系统资源消耗低 对HTTP并发连接的处理能力高 单台物理服务器可支持30000~5000个并发请求 2.Nginx与Apache区别 最核心的区别在于 Nginx 采用异步非阻塞机制&#xff0c;多个连接可以对应一个进程&#xff1b;Apache 采…

HyperAI超神经 x MoonBit | 与中科院、Intel 等专家共话基础软件前沿发展与期待

本次 Meetup 将讨论 MoonBit 编程语言、RuyiSDK、WAMR和 RISC-V 等技术&#xff0c;来现场参与不仅可以学习到最前沿的技术知识&#xff0c;更可与大咖面对面互动交流心得&#xff0c;还有美食茶歇与精美礼品&#xff0c;期待你的到来&#xff01; 扫码立即报名 ⬇️ 活动详情…

自动驾驶#芯片-1

概述 汽车是芯片应用场景之一&#xff0c;汽车芯片需要具备车规级。  车规级芯片对加工工艺要求不高&#xff0c;但对质量要求高。需要经过的认证过程&#xff0c;包括质量管理标准ISO/TS 16949、可靠性标准 AEC-Q100、功能安全标准ISO26262等。  汽车内不同用途的芯片要求…

SAP CS01/CS02/CS03 BOM创建维护删除BAPI使用及增强改造

BOM创建维护删除相关BAPI的使用代码参考示例&#xff0c;客户电脑只能远程桌面&#xff0c;代码没法复制粘贴出来&#xff0c;只能贴图。 创建及修改BAPI: CSAP_MAT_BOM_MAINTAIN。 删除BAPI: CSAP_MAT_BOM_DELETE。 改造BAPI: CSAP_MAT_BOM_MAINTAIN 改造点1&#xff1a;拷…

贪吃蛇小游戏简单制作-C语言

文章目录 游戏背景介绍实现目标适合人群所需技术浅玩Window API什么是API控制台程序窗口大小,名称设置 Handle(句柄)获取句柄 坐标结构体设置光标位置 光标属性获取光标属性设置光标属性 按键信息获取 贪吃蛇游戏设计游戏前的初始化设置窗口的大小和名称本地化设置 宽字符Waht …

金士顿U盘被写保护的解决方法

1.适用的U盘芯片信息 USB设备ID: VID 0951 PID 1666 设备供应商: Kingston 设备名称: DataTraveler 3.0 设备修订版: 0110 产品制造商: Kingston 产品型号: DataTraveler 3.0 产品修订版: PMAP 主控厂商: Phison(群联) 主控型号: PS2251-07(PS2307) - F/W 08.03.50 [2018-…

ViewModel原理分析

认识 ViewModel ViewModel 是一种用来存储和管理UI相关数据的类。 ViewModel 的作用可以从两个方面去理解&#xff1a; UI界面控制器&#xff1a;在最初的MVC模式中&#xff0c;由于 Activity / Fragment 承担的职责过重&#xff0c;因此在后续的 MVP、MVVM 模式中&#xff…

【C++进阶】模板与仿函数:C++编程中的泛型与函数式编程思想

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ ⏩收录专栏⏪&#xff1a;C “ 登神长阶 ” &#x1f921;往期回顾&#x1f921;&#xff1a;栈和队列相关知识 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀模板进阶 &#x1f9e9;<&…

OpenGauss数据库-8.权限管理

第2关&#xff1a;权限设置 gsql -d postgres -U gaussdb -W passwd123123 CREATE ROLE lily WITH CREATEDB PASSWORD passwd123123; GRANT lily TO gaussdb; 第3关&#xff1a;管理员 gsql -d postgres -U gaussdb -W passwd123123 CREATE USER peter WITH SYSADMIN PASSWOR…

uniapp地图选择位置

直接上代码 通过一个点击事件调用官方api即可调用 点击调用成功后显示如下 然后选择自己所需要的位置即可

解读光纤模块的参数有哪些

光模块的具体参数有传输速率、传输距离、中心波长、光纤类型、光口类型、工作温度范围、最大功耗等。下面给大家详解一下各个参数的作用 因为光纤本身对光信号有色散、损耗等副作用。因此不同类型的光源发出的光所能传输的距离不一样。对接光接口时&#xff0c;应根据最远的信号…

AutoKG:为语言模型打造高效自动化知识图谱

在人工智能领域&#xff0c;大型语言模型&#xff08;LLMs&#xff09;如BERT、RoBERTa、T5和PaLM等&#xff0c;以其在自然语言处理&#xff08;NLP&#xff09;任务中的卓越性能而著称。然而&#xff0c;这些模型在提供信息时可能会产生“幻觉”&#xff0c;即提供看似合理但…

Vue 路由传递参数 query、params

1、to的对象写法,绑定参数 <template> 2 <ul> 3 <li v-for"m in messlist" :key"m.id"> 4 <router-link :to"{ //使用params时&#xff0c;这个路径必须用name及别名......name: xiangqing, path: /bbb/message/deta…

Python酷库之旅-比翼双飞情侣库(01)

目录 一、xlrd库的由来 二、xlrd库优缺点 1、优点 1-1、支持多种Excel文件格式 1-2、高效性 1-3、开源性 1-4、简单易用 1-5、良好的兼容性 2、缺点 2-1、对.xlsx格式支持有限 2-2、功能相对单一 2-3、更新和维护频率低 2-4、依赖外部资源 三、xlrd库的版本说明 …