C++数据结构X篇_15_求二叉树叶子数与高度(递归方法)
本篇参考求二叉树叶子数与高度(C++)进行整理。
文章目录
- 1. 二叉树中叶子数与高度
- 2. 求二叉树叶子数与高度的实现代码
1. 二叉树中叶子数与高度
我们首先来看一看二叉树中叶子数与高度的定义:
-
叶子数:对于一个二叉树的节点,若其既没有左子树又没有右子树,那它就是叶子节点。整个二叉树的叶子数为所有叶子节点个数。 -
高度:二叉树高度又称深度,其为根节点到叶子节点路径的最大值。

2. 求二叉树叶子数与高度的实现代码
求二叉树叶子数与高度均采用递归的方法,其基本操作方法都比较类似,具体实现代码如下:
#include <iostream>
using namespace std;
//定义二叉树节点
class binarynode
{
public:char data; //节点数据域binarynode* lchild; //左孩子binarynode* rchild; //右孩子
};
//求树高度
int getheight(binarynode *root)
{if (root == NULL){return 0;}//求左子树高度int lheight = getheight(root->lchild);//求右子树高度int rheight = getheight(root->rchild);//当前节点高度int height = lheight > rheight ? lheight + 1 : rheight + 1;;return height;
}
//求叶子节点,采用递归方法
void calculateleafnum(binarynode* root, int* leafnum)
{if (root == NULL){return;}if (root->rchild == NULL && root->lchild == NULL){(*leafnum)++;}//左子树节点数目calculateleafnum(root->lchild, leafnum);//右子树节点数目calculateleafnum(root->rchild, leafnum);
}
//创建二叉树
void createtree()
{//创建节点binarynode node1 = { 'A',NULL,NULL };binarynode node2 = { 'B',NULL,NULL };binarynode node3 = { 'C',NULL,NULL };binarynode node4 = { 'D',NULL,NULL };binarynode node5 = { 'E',NULL,NULL };binarynode node6 = { 'F',NULL,NULL };binarynode node7 = { 'G',NULL,NULL };binarynode node8 = { 'H',NULL,NULL };//建立节点关系node1.lchild = &node2;node1.rchild = &node6;node2.rchild = &node3;node3.lchild = &node4;node3.rchild = &node5;node6.rchild = &node7;node7.lchild = &node8;//计算二叉树高度int height = getheight(&node1);cout << "二叉树的高度为:" << height << endl;//计算二叉树叶子数int num = 0;calculateleafnum(&node1, &num);cout << "二叉树的节点为:" << num << endl;
}int main()
{createtree();system("pause");return 0;
}
运行结果:

- 求二叉树叶子数与高度
相关文章:
C++数据结构X篇_15_求二叉树叶子数与高度(递归方法)
本篇参考求二叉树叶子数与高度(C)进行整理。 文章目录 1. 二叉树中叶子数与高度2. 求二叉树叶子数与高度的实现代码 1. 二叉树中叶子数与高度 我们首先来看一看二叉树中叶子数与高度的定义: 叶子数:对于一个二叉树的节点&#x…...
MySQL锁学习笔记
锁 事务的隔离性由锁来实现。 概述 锁是计算机协调多个进程或线程并发访问某一资源的机制。在程序开发中会存在多线程同步的问题,当多个线程并发访问某个数据的时候,尤其是针对一些敏感的数据(比如订单、金额等),我…...
如何将前后端分离项目部署到本地的Docker Desktop容器运行并且访问
文章目录 前言 完成了客户的一个前后端分离项目,要求部署到客户电脑上去展示,那肯定不能直接把代码弄上去跑呀~~~,于是我就想把他们都打包部署到本地的docker容器里面,方便运行和访问,so,以下内容就详细介…...
前端开发中的try...catch
首先try...catch 结构可以用来处理 Promise 中的异常。在 JavaScript 中,Promise 提供了一种处理异步操作的机制,并且可以通过 .catch() 方法捕获并处理异步操作中抛出的异常。 async function someAsyncFunction() {try {const result await someProm…...
数据加密中,采用密钥管理系统相比加密机的好处
密钥管理系统与加密机都能提供数据加解密,那么针对具体的应用加密,采用密钥管理系统比单纯使用加密机有哪些优点,列表如下: 集中化管理:密钥管理系统可以对加密算法和密钥进行集中化管理,使得企业可以对加…...
Elasticsearch:什么是大语言模型 (LLMs)?
假设你想参加流行的游戏节目 Jeopardy(这是一个美国电视游戏节目,参赛者将获得答案并必须猜测问题)。 要参加演出,你需要了解任何事情的一切。 所以你决定在接下来的三年里每天都花时间阅读互联网上的所有内容。 你很快就会意识到…...
神奇的python的生成器
函数生成器代码 def num():print("message 1")yield 1print("message 2")yield 2print("message 3")yield 3f num() x next(f) # message 1 print(x) # 输出1x next(f) # message 2 print(x) # 输出2x next(f) # message 3 print(x) …...
【来点小剧场--项目测试报告】个人博客项目自动化测试
前述 针对个人博客项目进行测试,个人博客主要由七个页面构成:注册页、登录页、个人博客列表页、博客发布页、博客修改页、博客列表页、博客详情页,主要功能包括:注册、登录、编辑并发布博客、修改已发布的博客、查看详情、删除博…...
【安卓环境搭建报错的解决】
安卓环境搭建报错的解决 问题描述解决方法 问题描述 电脑中新安装的 Android Studio Giraffe | 2022.3.1 Patch ,运行 studio 系统工程,提示如下错误 Duplicate class kotlin.collections.jdk8.CollectionsJDK8Kt found in modules kotlin-stdlib-1.8.…...
Pruning Pre-trained Language Models Without Fine-Tuning
本文是LLM系列文章,针对《Pruning Pre-trained Language Models Without Fine-Tuning》的翻译。 修剪未微调的预训练语言模型 摘要1 引言2 相关工作3 背景4 静态模型剪枝5 实验6 分析7 结论8 局限性 摘要 为了克服预训练语言模型(PLMs)中的过度参数化问题…...
Java内存模型-Java Memory Model(JMM)-可见性、原子性、有序性
5. Java内存模型之JMM 5.1 先从大场面试开始 你知道什么是Java内存模型JMM吗? JMM和volatile他们两个之间的关系? JMM没有那些特征或者它的三大特征是什么? 为什么要有JMM,它为什么出现?作用和功能是什么…...
基于Springboot实现在线答疑平台系统项目【项目源码+论文说明】
基于Springboot实现在线答疑平台系统演示 摘要 社会的发展和科学技术的进步,互联网技术越来越受欢迎。网络计算机的生活方式逐渐受到广大师生的喜爱,也逐渐进入了每个学生的使用。互联网具有便利性,速度快,效率高,成本…...
前端工程化知识系列(1)
目录 1. 什么是前端工程化,以及它为前端开发带来了哪些好处?2. 你使用过哪些版本控制系统?描述一下你在团队中如何处理代码合并和冲突解决的经验。3. 什么是Git,它的工作原理是什么?可以解释一下常用的Git命令吗&#…...
xml文件报错 ORA-00907: 缺失右括号
原来的sql 更改之后 加一个select * from ()...
VScode platformio的使用
一、platformio 工程创建 打开vscode界面你会发现左下多了个家的小图标,点击这里就可以进入platformio。 在右侧Quick Access栏中,有4个选项。可以看得出来,我们这里直接点击创建一个新的工程。 点击New Project打开project配置界面&#x…...
transformer_01
一、传统RNN存在的问题 1.序列前序太长,每个xi要记住前面的特征,而且一直在学,没有忘记,可能特征不能学的太好 2.串行,层越多越慢,难以堆叠很多层; 3.只能看到过去,不能看到未来 搞…...
JavaSE入门---认识方法
文章目录 什么是方法?方法定义实参和形参的关系没有返回值的方法 方法重载方法签名 什么是方法? 在编程中某段功能的代码可能频繁使用到,如果在每个位置都重新实现一遍,会有一些缺点,比如: 使程序变得繁琐…...
编译[Bug]——too few arguments for template template parameter “Tuple“ detected
项目场景: 当使用高版本的cuda去安装低版本pytorch,并且编译用低版本pytorch写的cuda算子时,或者说是VS的版本过高如2022和2019,都有可能会出现某个.h文件或者.c文件报错,如: error: too few arguments f…...
网工内推 | 南天软件,base北京,需持有CCIE认证,最高25k
01 北京南天软件有限公司 招聘岗位:IPT运维工程师 职责描述: 负责客户Cisco语音网络IPT ,CUCM的日常运维,扩容和项目支持,支持路由交换,无线等项目,实施工作以及相关实施文档。 任职要求: 1、…...
Unity有限状态机的简易实现
本人嘴笨,不会说。 该代码实现一个功能较为齐全的有限状态机,可用于大部分的应用场景。 大致实现几个功能 状态更新状态转换状态消息处理全局状态转换和反转状态(转换为前一个状态) 代码分为 状态类状态管理类枚举(…...
你的ESP32项目还缺个BGM?手把手教你做个可切换歌单的迷你音乐播放器
为ESP32项目打造智能音乐模块:从蜂鸣器驱动到歌单管理系统 当你的智能家居设备在清晨用一段舒缓旋律唤醒你,或是机器人完成指令时播放一段俏皮的提示音,这种交互体验会瞬间提升产品的温度。ESP32作为一款功能强大的物联网芯片,完全…...
Windows下OpenClaw极简安装:Qwen3.5-9B-AWQ-4bit镜像10分钟体验
Windows下OpenClaw极简安装:Qwen3.5-9B-AWQ-4bit镜像10分钟体验 1. 为什么选择这个组合? 最近在折腾本地AI自动化时,发现很多工具要么配置复杂,要么对硬件要求太高。直到遇到OpenClawQwen3.5-9B-AWQ-4bit这个组合,才…...
告别环境冲突:基于快马平台与homebrew打造团队高效统一开发环境
作为一名长期与团队协作的开发者,我深刻体会到环境配置不一致带来的痛苦。新同事入职要花一整天配环境,不同项目依赖冲突导致"在我机器上能跑"的经典问题,甚至同一项目组因为系统更新节奏不同而出现隐性兼容问题。最近尝试用homebr…...
效率提升300%:Qwen3.5-9B在OpenClaw中的批量文件处理技巧
效率提升300%:Qwen3.5-9B在OpenClaw中的批量文件处理技巧 1. 为什么需要批量文件处理自动化 作为一个经常需要处理大量文档的技术写作者,我过去每周要花至少8小时在重复的文件整理上——重命名几百个截图、合并多个Markdown文档、批量转换PDF为可编辑格…...
AI 编程上下文管理新范式(非常详细),Spec 机制从入门到精通,收藏这一篇就够了!
最近围绕 Spec 的讨论明显变多。比较有代表性的声音大致有两类:一类更关注 Spec 和代码之间的边界,另一类更关注 Spec 在真实项目协作中的工程价值。这两类观察并不冲突,放在一起看,刚好能把问题看得更完整。 本质上都在回答同一…...
Element Plus:Vue 3企业级UI组件库的全方位解析与实践指南
Element Plus:Vue 3企业级UI组件库的全方位解析与实践指南 【免费下载链接】element-plus 🎉 A Vue.js 3 UI Library made by Element team 项目地址: https://gitcode.com/GitHub_Trending/el/element-plus Element Plus作为基于Vue 3的企业级UI…...
Ubuntu 20.04忘记密码?5分钟搞定root和用户密码重置(附GRUB菜单截图)
Ubuntu 20.04密码重置实战指南:从GRUB到恢复模式的完整流程 当你面对一台锁定的Ubuntu 20.04机器时,那种焦虑感我深有体会——无论是个人开发环境还是团队共享服务器,密码遗忘都可能造成工作流程的中断。不同于Windows系统的密码重置工具&am…...
03_Neo4j知识体系之5.x与2026.x新特性和版本演进
03_Neo4j知识体系之5.x与2026.x新特性和版本演进 体系 版本演进层:Neo4j 5.x LTS、2025/2026 日历化版本、Cypher 5 与 Cypher 25、Autonomous Clustering、Ops Manager、Vector Indexes、AI 能力关联能力:与升级迁移路径、集群扩容、Fabric 联邦查询、差…...
**发散创新:基于Python的本体推理与知识表示实战解析**在人工智能和语义网技术飞速发展的今天,**知识表
发散创新:基于Python的本体推理与知识表示实战解析 在人工智能和语义网技术飞速发展的今天,知识表示(Knowledge Representation) 已成为构建智能系统的底层核心能力之一。它不仅决定了系统对现实世界的理解深度,还直接…...
别再问怎么连了!Win10蓝牙串口配对仪器设备,保姆级图文教程(含端口号查看)
Win10蓝牙串口连接实战指南:从配对到调试的全流程解析 蓝牙串口通信在嵌入式开发中扮演着关键角色,特别是在需要无线传输数据的场景下。想象一下,当你面对一台工业测量设备,需要通过蓝牙实时获取数据流,却发现Windows …...
