树与二叉树

本文深入讲解了树的数据结构,特别是二叉树的概念,包括节点的度、叶节点、父节点、子节点等基本概念。介绍了二叉树的特性,如每个节点最多有两个子节点,以及满二叉树和完全二叉树的区别。此外,还提到了二叉树在磁盘目录结构中的应用,并给出了一些相关问题的解答。
摘要由CSDN通过智能技术生成

前面我们已经介绍了栈与队列,这两个是线性的数据结构,当然也不止这两个,还包括顺序表和单链表。

今天我们要介绍的是非线性的结构——树。但树的结构比较复杂,我们选择二叉树重点讲。

0.引言 

上面已经说到了,树是一种非线性的结构,它由有限个结点组成,具有一定的层序关系。但是我们学习的树的物理形态和我们现实中的树略有不同,它是一颗倒置的树。 如图。

最上面的结点称为根节点,根节点有且只有一个,根节点往下分出不同的枝干,枝干又继续往下分,具有一定的递归关系,我们可以猜到树应该是递归定义的,这确实是对的。

要注意:树之间的枝干不能有交集,也就是树当中不能有环,否则就不是树。

1.1树的相关概念

 

节点的度 :(只针对单个结点)某一个结点连接的子树个数,如图中,A的度为6,B的度为0。
叶节点或终端节点 :度为 0 的节点称为叶节点; 如上图: B C H I... 等节点为叶节点
非终端节点或分支节点 :度不为 0 的节点; 如上图: D E F G... 等节点为分支节点
双亲节点或父节点 :若一个节点含有子节点,则这个节点称为其子节点的父节点; 如上图: A B 的父节点
孩子节点或子节点 :一个节点含有的子树的根节点称为该节点的子节点; 如上图: B A 的孩子节点
兄弟节点 具有相同父节点 的节点互称为兄弟节点; 如上图: B C 是兄弟节点。注意,一定要是具有相同父亲节点的节点才是兄弟节点,如H,I就不是兄弟节点。
树的度 :一棵树中,最大的节点的度称为树的度; 如上图:树的度为 6
节点的层次 :从根开始定义起,根为第 1 层,根的子节点为第 2 层,以此类推;
树的高度或深度 :树中节点的最大层次; 如上图:树的高度为 4
堂兄弟节点 :双亲在同一层的节点互为堂兄弟;如上图: H I 互为堂兄弟节点
节点的祖先 :从根到该节点所经分支上的所有节点;如上图: A 是所有节点的祖先
子孙 :以某节点为根的子树中任一节点都称为该节点的子孙。如上图:所有节点都是 A 的子孙
森林 :由 m m>0 )棵互不相交的树的集合称为森林;
1.2树的表示方式
树中的每个元素都是一个结点,我们可以考虑像链表一样,将有关的节点链接在一起。但具体的链接方式是什么呢?
我们考虑单颗树,他们往下都分出不同的子树,也就是说对于不同的节点,我们链接不同的节点,且节点的个数不同。
这样的话,不同的节点有不同的情况,处理起来就不具有统一性了。
这里我们介绍另外一种方法——孩子兄弟表示法,也就是每一个节点都链接自己的兄弟节点,以及自己的一个孩子。

 如图,A链接B,而B链接D和C,通过B就能找到C和D,找到D又能找到E->H->I,E->F。

通过这种方式,就将树链接起来了,并且树的表示具有统一性。

1.3树的实际应用

磁盘目录中的文件储存就是一个很好的例子。

 

每一个文件视为一个结点的话,每个文件夹往下又有不同的文件夹,展开就是一个经典的树状结构。

2.1二叉树的概念

上面提到树概念时说到了树的度,一颗树可以有不同的度,也就是说根节点链接的子树的个数可以不同。

但是二叉树的不同,二叉树要求每个结点的度最多是2。

如果树中每个结点都有左右孩子,那么这个树就称为满二叉树。如果树的前K-1层已经满了,但是第K层没有满,且第K层的节点从左往右顺序排序,那么这种树称为完全二叉树。

满二叉树可以视为一个特殊的完全二叉树。 

1.若规定二叉树根节点所在层为第一层,那么它的第i层最多有2^(i-1)个节点,这是比较显然的一个结论,第一个有1个,第二层最多有2个,第三层最多有4个,不断递归得到结论。

2.若规定二叉树根节点所在层为第一层,一个深度为h的满二叉树的节点个数为2^h -1。

满二叉树的所有节点个数= 1+2+4+8+.......+2^(h-1) ,由等比数列的求和公式,立即得到结论。

3.条件同上,如果一个满二叉树的节点个数为n,那么有2^h -1 = n ->深度h = log(n+1)。

4.对任何一棵二叉树, 如果度为0其叶结点个数为 n0, 度为2的分支结点个数为n2 ,则有

n0= n2+ 1,这更类似是一种规律。
如果我们有了父亲结点或者是左右孩子的位置,如何计算另一个?

5.假设父亲结点的位置是i,那么左孩子的位置是2*i+1,右孩子是2*i+2。如果已知左孩子的位置是i,那么父亲结点的位置是(i-1)/2,而如果已知右孩子的位置是i,那么父亲结点的位置是(i-2)/ 2。实际上都是一样的,我们可以统一用(i-1)/2来代替。

接下来我们用上面提到的结论来解决下面的五个问题。

1. 某二叉树共有 399 个结点,其中有 199 个度为 2 的结点,则该二叉树中的叶子结点数为( )
A 不存在这样的二叉树
B 200
C 198
D 199
2. 下列数据结构中,不适合采用顺序存储结构的是( )
A 非完全二叉树
B
C 队列
D
3. 在具有 2n 个结点的完全二叉树中,叶子结点个数为( )
A n
B n+1
C n-1
D n/2
4. 一棵完全二叉树的节点数为 531 个,那么这棵树的高度为( )
A 11
B 10
C 8
D 12
5. 一个具有 767 个节点的完全二叉树,其叶子节点个数为()
A 383
B 384
C 385
D 386

答案1.B 2.A 3.A 4. B 5. B

本次的介绍到此结束,下期会介绍二叉树的顺序结构与堆,以及堆的具体实现。 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值