二叉树的基本概念(C语言)

简介: 二叉树的基本概念(C语言)


<你想看的我这里都有😎 >

二叉树

定义:二叉树是一种特殊的树状数据结构,它由多个节点组成,每个节点最多有两个子节点(左结点和右结点)这些子节点可以为空,任意的二叉树均由以下几种情况复合而成的:

因此我们可以得到以下结论:

  1. 二叉树的度小于等于2,二叉树的度不一定等于2,但是度为2的树就是二叉树
  2. 二叉树是有序树,子树有左右之分,不能颠倒

二叉树的分类(目前只谈两种)

满二叉树

定义:每一层的结点数都达到最大值的二叉树称为满二叉树

若二叉树层数为k,且结点总数为(2^k)-1 ,则为满二叉树

完全二叉树

定义:二叉树的最后一层是不满情况的二叉树称为完全二叉树,满二叉树是一种特殊的完全二叉树

若二叉树层数为k,且树中结点总数为[2^(k-1) ,(2^k) - 1],则为完全二叉树

二叉树的性质(其余的可以自己总结)

1.若规定根节点的层数为1,则棵非空二叉树的第k层上最多有2^(k-1)个结点

2. 若规定根节点的层数为1,则深度为k的二叉树的最大结点总数为(2^k) - 1

3. 若规定根节点的层数为1,则深度为k的二叉树的最小结点总数为2^(k - 1)

4. 完全二叉树中,度为2的结点总数 = 叶子结点总数 - 1

5. 任意一棵二叉树,叶子节点总数 = 分支节点总数 + 1(根节点)

6. 任意一棵二叉树,结点总数 = 叶子结点总数 + 分支节点总数(度为2的结点)

7. 对于一颗完全二叉树,2 * 叶子结点总数 + 度为1的结点总数 - 1 = 结点总数

8. 完全二叉树 总结点数为偶数 则度为1的结点数为1 总节点数为奇数 则度为1的结点数为0

9. 若规定根节点的层数为1,则具有n个结点的二叉树的深度,h = (log以2为底n+1的对数)

10. 对于具有n个结点的完全二叉树,如果按照从上至下从左至右的数组顺序对所有节点从0开始编号,则对于序号为i的结点有:

  1. 若i=0,i为根节点下标,无双亲节点
  2. 若i>0,i下标的结点的双亲结点的下标为(i-1)/ 2
  3. 若i>0,i下标的结点的左孩子结点的下标为2 * i +1
  4. 若i>0,i下标的结点的左孩子结点的下标为2 * i +2
  5. 对于节点 i,若 2 * i + 1 < n,则节点 i 有左孩子。若 2 * i + 1 >= n,则节点 i 没有左孩子
  6. 对于节点 i,若 2 * i + 2 < n,则节点 i 有右孩子。若 2 * i + 2 >= n,则节点 i 没有左孩子

选择练习

1、某二叉树共有 399 个结点,其中有 199 个度为 2 的结点,则该二叉树中的叶子结点数为(B)

A 不存在这样的二叉树

B 200

C 198

D 199

结点总数 = 叶子结点总数 + 分支结点总数(度为2的结点)
 399    =       ?    +     199 
 ? =  200

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

A n

B n+1

C n-1

D n/2

//文字描述
完全二叉树中,度为2的结点总数 = 叶子结点总数 - 1
又因为,叶子结点总数 + 度为1的结点总数 + 度为2的结点总数= 2n
则可得:2*叶子结点总数 + 度为1的结点总数 - 1 = 2n
完全二叉树中,度为1的结点总数只能为0或1,由于2n为偶数,故度为1的结点总数 = 1
因此,叶子结点总数 = n
//简化描述
完全二叉树中,有n2 = n0 - 1
再根据题设条件,得n0 + n1 + n2 = 2n
则可得:2n0 + n1 - 1 = 2n
完全二叉树中,n1只能为0或1,由于2n为偶数,故n1 = 1
因此,n0 = n

3、一棵完全二叉树的节点数位为531个,那么这棵树的高度为(B )

A 11

B 10

C 8

D 12

若二叉树层数为k,且树中结点总数为[2^(k-1) ,(2^k) - 1],则为完全二叉树
A:[2^(11-1) ,(2^11) - 1] = [1024,2047]   1024 > 531
B:[2^(10-1) ,(2^10) - 1] = [512,1023]    512  < 531 < 1023
C:[2^(8-1) ,(2^8) - 1] = [128,511]       511  < 531
D:[2^(12-1) ,(2^12) - 1] = [2048,4095]   2048 > 531

4、一个具有767个节点的完全二叉树,其叶子节点个数为(B)

A 383

B 384

C 385

D 386

完全二叉树 总结点数为偶数 则度为1的结点数为1 总节点数为奇数 则度为1的结点数为0
2 * 叶子结点总数 + 度为1的结点总数 - 1 = 结点总数
767为奇数,故度为1的结点总数为0,故:
2 * 叶子结点总数 - 1 = 结点总数
2 *      ?     - 1 =    767
? = 384

二叉树的存储结构

顺序存储方式

       顺序存储方式即使用组为底层逻辑进行存储一般用于实现完全二叉树,因为对不完全二叉树使用顺序存储会存在空间浪费:

二叉树顺序存储在物理逻辑上是一个数组,在虚拟逻辑上是一颗二叉树

链式存储方式

       链式存储方式即使用链表为底层逻辑进行存储,同时链表还可以表示二叉树中各元素间的逻辑关系。通常的方法是链表中每个结点由三个域组成,数据域和左右指针域,左右指针分别用来给出该结点左孩子和右孩子所在的链结点的存储地址。链式结构又分为二叉链表和三叉链表,前我们学习的一般都是二叉链,在学习至红黑树时会用到三叉链......

~over~

相关文章
|
27天前
|
算法 数据处理 C语言
C语言中的位运算技巧,涵盖基本概念、应用场景、实用技巧及示例代码,并讨论了位运算的性能优势及其与其他数据结构和算法的结合
本文深入解析了C语言中的位运算技巧,涵盖基本概念、应用场景、实用技巧及示例代码,并讨论了位运算的性能优势及其与其他数据结构和算法的结合,旨在帮助读者掌握这一高效的数据处理方法。
41 1
|
28天前
|
C语言 开发者
C语言中的模块化编程思想,介绍了模块化编程的概念、实现方式及其优势,强调了合理划分模块、明确接口、保持独立性和内聚性的实践技巧
本文深入探讨了C语言中的模块化编程思想,介绍了模块化编程的概念、实现方式及其优势,强调了合理划分模块、明确接口、保持独立性和内聚性的实践技巧,并通过案例分析展示了其应用,展望了未来的发展趋势,旨在帮助读者提升程序质量和开发效率。
54 5
|
27天前
|
程序员 编译器 C语言
C语言中的预处理器指令,涵盖其基本概念、常见指令(如`#define`、`#include`、条件编译指令等)、使用技巧及注意事项
本文深入解析C语言中的预处理器指令,涵盖其基本概念、常见指令(如`#define`、`#include`、条件编译指令等)、使用技巧及注意事项,并通过实际案例分析,展示预处理器指令在代码编写与处理中的重要性和灵活性。
61 2
|
28天前
|
网络协议 物联网 数据处理
C语言在网络通信程序实现中的应用,介绍了网络通信的基本概念、C语言的特点及其在网络通信中的优势
本文探讨了C语言在网络通信程序实现中的应用,介绍了网络通信的基本概念、C语言的特点及其在网络通信中的优势。文章详细讲解了使用C语言实现网络通信程序的基本步骤,包括TCP和UDP通信程序的实现,并讨论了关键技术、优化方法及未来发展趋势,旨在帮助读者掌握C语言在网络通信中的应用技巧。
40 2
|
1月前
|
C语言
【数据结构】二叉树(c语言)(附源码)
本文介绍了如何使用链式结构实现二叉树的基本功能,包括前序、中序、后序和层序遍历,统计节点个数和树的高度,查找节点,判断是否为完全二叉树,以及销毁二叉树。通过手动创建一棵二叉树,详细讲解了每个功能的实现方法和代码示例,帮助读者深入理解递归和数据结构的应用。
133 8
|
3月前
|
C语言
数据结构基础详解(C语言):图的基本概念_无向图_有向图_子图_生成树_生成森林_完全图
本文介绍了图的基本概念,包括图的定义、无向图与有向图、简单图与多重图等,并解释了顶点度、路径、连通性等相关术语。此外还讨论了子图、生成树、带权图及几种特殊形态的图,如完全图和树等。通过这些概念,读者可以更好地理解图论的基础知识。
196 8
|
3月前
|
存储 算法 C语言
数据结构基础详解(C语言): 二叉树的遍历_线索二叉树_树的存储结构_树与森林详解
本文从二叉树遍历入手,详细介绍了先序、中序和后序遍历方法,并探讨了如何构建二叉树及线索二叉树的概念。接着,文章讲解了树和森林的存储结构,特别是如何将树与森林转换为二叉树形式,以便利用二叉树的遍历方法。最后,讨论了树和森林的遍历算法,包括先根、后根和层次遍历。通过这些内容,读者可以全面了解二叉树及其相关概念。
|
3月前
|
存储 机器学习/深度学习 C语言
数据结构基础详解(C语言): 树与二叉树的基本类型与存储结构详解
本文介绍了树和二叉树的基本概念及性质。树是由节点组成的层次结构,其中节点的度为其分支数量,树的度为树中最大节点度数。二叉树是一种特殊的树,其节点最多有两个子节点,具有多种性质,如叶子节点数与度为2的节点数之间的关系。此外,还介绍了二叉树的不同形态,包括满二叉树、完全二叉树、二叉排序树和平衡二叉树,并探讨了二叉树的顺序存储和链式存储结构。
|
3月前
|
存储 算法 C语言
C语言手撕实战代码_二叉树_构造二叉树_层序遍历二叉树_二叉树深度的超详细代码实现
这段代码和文本介绍了一系列二叉树相关的问题及其解决方案。其中包括根据前序和中序序列构建二叉树、通过层次遍历序列和中序序列创建二叉树、计算二叉树节点数量、叶子节点数量、度为1的节点数量、二叉树高度、特定节点子树深度、判断两棵树是否相似、将叶子节点链接成双向链表、计算算术表达式的值、判断是否为完全二叉树以及求二叉树的最大宽度等。每道题目均提供了详细的算法思路及相应的C/C++代码实现,帮助读者理解和掌握二叉树的基本操作与应用。
|
3月前
|
存储 C语言
数据结构基础详解(C语言): 树与二叉树的应用_哈夫曼树与哈夫曼曼编码_并查集_二叉排序树_平衡二叉树
本文详细介绍了树与二叉树的应用,涵盖哈夫曼树与哈夫曼编码、并查集以及二叉排序树等内容。首先讲解了哈夫曼树的构造方法及其在数据压缩中的应用;接着介绍了并查集的基本概念、存储结构及优化方法;随后探讨了二叉排序树的定义、查找、插入和删除操作;最后阐述了平衡二叉树的概念及其在保证树平衡状态下的插入和删除操作。通过本文,读者可以全面了解树与二叉树在实际问题中的应用技巧和优化策略。