当前位置: 首页 > news >正文

学习数据结构(13)二叉树链式结构下

1.实现链式结构二叉树

(1)求二叉树节点个数

(2)求二叉树叶子节点个数

(3)求二叉树第K层节点个数

(4)求二叉树的深度/高度

(5)二叉树查找值为x的节点

(6)二叉树的销毁

(7)层序遍历

层序遍历即自上而下,自左而右逐层访问树的节点的过程,层序遍历需要额外借助队列这种数据结构来实现。

以上图所示的二叉树为例,利用队列实现层序遍历的过程如下:

将队列有关函数的头文件和源文件导入当前项目,将队列节点数据结构中数据的数据类型改为链式二叉树节点的指针,首先将根节点入队:

循环判断队列是否为空,若不为空,则提取队头数据,将队头出队列,若队头左右节点不为空,将队头的左右节点依次入队:

最后销毁队列

(8)判断二叉树是否为完全二叉树

创建队列,将根节点入队,循环判断队列是否为空,若不为空则提取队头数据,将队头出队,若队头数据为空指针,则跳出循环,否则将队头左右节点依次入队。

循环判断队列是否为空,若不为空则提取队头数据,将队头出队,若队头数据不为空指针,则二叉树为非完全二叉树,销毁队列,返回false,若直到跳出循环队头数据一直为空指针,则二叉树为完全二叉树,销毁队列,返回true。

2.二叉树相关选择题

(1)二叉树性质

对于任何一颗二叉树,如果度为0的叶子节点的个数为n_{0},度为2的分支节点的个数为n_{2},则有n_{0}=n_{2}+1

推导:二叉树的边数既为2n_{2}+n_{1}又为n_{0}+n_{1}+n_{2}-1,联立即可得n_{0}=n_{2}+1

例题:

①在具有2n个结点的完全二叉树中,叶子结点(A)

A、n

B、n+1

C、n-1

D、n/2

解析:n_{0}+n_{1}+n_{2}=2n,n_{2}=n_{0}-1,故2n_{0}+n_{1}-1=2n,又在完全二叉树中,度为1的节点只可能没有或只有一个,当n_{1}=0时,n_{0}=\frac{2n+1}{2},不为整数,排除;当n_{1}=1时,n_{0}=n,符合题意,故选A

②一棵完全二叉树的结点数为531个,那么这棵树的高度为(B)

A、11

B、10

C、8

D、12

解析:设k为层高,满二叉树总节点个数为2^{k}-1,当k=9时,2^{k}-1=511<531,故这棵树高度为9+1=10,选B

(2)二叉树遍历

若给出二叉树的前序序列,则序列中第一个即二叉树的根节点,若给出二叉树的中序序列,则根节点左右两侧的序列分别是根节点的左子树和右子树,若给出二叉树的后序序列,则序列中最后一个即二叉树的根节点

例题:

③设一颗二叉树的中序遍历序列:badce,后序遍历序列:bdeca,则二叉树前序遍历(D)

A、adbce

B、decab

C、debac

D、abcde

解析:后序遍历中最后一个节点为a,故根节点为a,则由中序遍历得b为a节点的左子树,dce为a节点的右子树,依此类推,可画出二叉树的草图:

,故前序序列为abcde

④某二叉树的后序遍历序列与中序遍历序列相同,均为ABCDEF,则按层次输出(同一层从左到右)的序列为(A)

A、FEDCBA

B、CBAFED

C、DEFCBA

D、ABCDEF

解析:跟上一题的分析方法相同,画出草图:

,故层序序列为FEDCBA

http://www.xdnf.cn/news/1380673.html

相关文章:

  • 线程池及线程池单例模式
  • 带动态条件的模糊查询SQL
  • DINOv2 vs DINOv3 vs CLIP:自监督视觉模型的演进与可视化对比
  • LeetCode 3446. 按对角线进行矩阵排序
  • UE5提升分辨率和帧率的方法
  • 搭建私有云3步法:cpolar简化Puter本地云端配置
  • C# SIMD编程实践:工业数据处理性能优化案例
  • C++ 哈希概念版
  • 【实战笔记】OCI Ubuntu 24.04 + TigerVNC + XFCE + Chrome 开机自启全记录
  • 错误模块路径: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll
  • 从卡顿到丝滑:大型前端项目 CSS 优化全攻略
  • [高并发系统设计] - 搭建高并发高可用的系统 - 学习与探究
  • 【大前端】React useEffect 详解:从入门到进阶
  • Shi-Tomasi 算法和 Harris 角点检测算法都是经典的角点检测方法,但它们在理论基础和实现细节上有一些区别。下面我将详细对比这两种算法。
  • List<Map<String, String>>最简单的遍历方式
  • 【传奇开心果系列】Flet框架带图标带交互动画的办公用品费用占比统计饼图自定义模板
  • GitHub 热榜项目 - 日榜(2025-08-28)
  • 达梦数据库-重做日志文件(一)
  • 云计算学习100天-第30天
  • 09- AI大模型-docker部署dify以及 dify的使用案例:公司智能助手(构建知识库)(上篇)
  • TDengine 数据订阅支持 MQTT 协议用户手册
  • 【SQL】计算一年内每个月份的周数据
  • 上海控安:WiFi网络安全攻击
  • SONiC 之 Testbed(2)Ansible
  • GeoScene Maps 完整入门指南:从安装到实战
  • Android稳定性问题的常见原因是什么
  • 【python】@staticmethod装饰器
  • 同一个栅格数据,为何在QGIS和ArcGIS Pro中打开后显示的数值范围不同?
  • 苍穹外卖项目笔记day01
  • 【VSCode】使用VSCode打开md文件以及转化为PDF