第八章:C语言数据结构与算法初阶之树

系列文章目录



前言


树是一种非常重要的数据结构。

一、什么是树

1、树的概念

树是一种 非线性 的数据结构,它是由n(n>=0)个有限节点组成一个具有层次关系的集合。
线性结构其实就是一对一的感觉,比如我们之前学的顺序表、链表、栈、队列他们都是一对一的,而非线性结构自然就是一对多的,如下图所示:
在这里插入图片描述
这个图中的非线性结构,将其倒过来的时候其实就形似一棵树,因此这种非线性结构就称之为

2、非树

树的子节点之间没有联系

树的子节点之间是没有联系的。下图所示的图中红线连接两个子节点,所以这个结构就不是树。
在这里插入图片描述

树的子节点有且仅有一个父节点

子节点通过红线连接了新的父节点,导致这些子节点的父节点不只有一个。因此这种结构不称之为树。
在这里插入图片描述

3、树的术语

在这里插入图片描述

节点的度
一个节点含有的子树的个数称之为度,简而言之,该节点直接相连了几个子节点,他的度就是多少。

叶结点
没有子节点的节点称之为叶节点,即度为0的节点称之为叶节点。

父节点
若一个节点有子节点,那么这个节点就是那些子节点的父节点。

子节点
若一个节点有父节点,那么这个节点就是父节点的子节点。

节点的祖先
从根到该节点的路径上,所有在该节点上方的节点都是该点的祖先。

子孙
以某一节点为根的子树中任一节点。

节点的层次
从根节点开始定义起,根为第一层,根的子节点为第二层,以此类推。

树的高度或深度
树中节点的最大层次。

4、树的表示——孩子兄弟表示法

在这里插入图片描述
我们创建一个结构体,这个结构体除了存储该节点的数据外,还要存储左边第一个子节点的地址,以及右边第一个兄弟节点的地址。这样就能有效地串通所有的节点。

struct TreeNode
{
	int a;
	struct TreeNode *firstchild;
	struct TreeNode *nextbrother;
};

二、二叉树

二叉树是一种特殊的树,节点的度都小于等于2。
在这里插入图片描述

1、满二叉树

满二叉树是一种特殊的二叉树,除了叶节点的度为0外,其余节点的度均为2。
在这里插入图片描述

2、完全二叉树

在这里插入图片描述
完全二叉树前N-1层是满的,最有一层可以不满,但必须从左到右是连续的,所以满二叉树是特殊的完全二叉树。

三、二叉树的性质

  1. 若规定根节点的层数是1,则一棵非空二叉树的第i层上最多有2(i-1)个节点。

  2. 若规定根节点的层数是1,则深度为h的二叉树的最多节点数是2h-1。

  3. 对任何一棵二叉树,度为0的叶结点个数为n0,度为2的节点个数为n2​,则有n0 = n2 + 1​

  4. 若规定根节点的层数为1,具有n个节点的满二叉树的深度为h,h=log2(n+1)

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

    • 若 i>0,i位置节点的父节点的序号为:(i-1)/2, i=0的时候,i为根节点的编号,没有父亲节点。

    • 若2i+1<n,左孩子序号:2i+1;若2i+1>=n,没有左孩子。

    • 若2i+2<n,右孩子序号:2i+2;若2i+2>=n,没有右孩子。

在这里插入图片描述

从上面的图片中的规律所示,我们能得到如下推导:
(N为根节点层数为1的二叉树层数

第N层:2^(N-1)

所以最多节点数为:

MAX = 20 + 21 + … + 2N-1= 2N - 1
MIN = 2N-1

设节点的个数为X,完全二叉树的高度为h:
最多:h = log2(X+1)
最少:h = log2X - 1


总结

树是一种非线性结构,二叉树是特殊的树。
生活的情况越艰难,我越感到自己更坚强,甚而也更聪明。——高尔基

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数据结构与算法分析:C语言描述清晰版》是由美国著名计算机科学家Mark Allen Weiss所著,是一本介绍数据结构和算法的经典教材之一。该书内容丰富、深入浅出,既有基础知识的讲解,也有高级算法的探讨,适合计算机科学及其他相关专业的学生、计算机编程爱好者、程序员等人群。 本书主要内容包括线性结构、递归、、排序和搜索算法、散列表、图等多个章节。其中,线性结构是数据结构的基础,包括线性表、栈、队列等数据结构的实现和操作。递归是一种特殊的函数调用方式,在算法设计中应用广泛,本书详细讲解了递归的原理和应用。是一种重要的非线性数据结构,本书介绍了二叉、堆、AVL等多种形结构的实现和应用。排序和搜索算法是解决各种实际问题的重要工具,本书详细讲解了冒泡排序、插入排序、归并排序、快速排序等多种排序算法及二分查找、哈希表查找等多种搜索算法。散列表是一种实现高效查找的数据结构,本书深入浅出地讲解了散列表的实现原理和应用。图是一种复杂的数据结构,在算法设计中具有很高的应用价值,本书介绍了图的表示方法、遍历方法和最短路径算法等多个方面的内容。 总的来说,《数据结构与算法分析:C语言描述清晰版》是一本综合性的计算机科学教材,既适合初学者入门学习,也适合中高级程序员深入研究。本书内容翔实,全面而深入,不仅介绍了数据结构和算法的基本知识,还讲解了实践中的应用技巧和注意事项,对于从事计算机科学相关领域的人员来说,具有很高的实用价值和参考意义。如果你想在数据结构和算法方面有更深入的了解,那么这本书绝对是你不可错过的参考资料。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值