C语言数据结构之树与二叉树的基本概念

1.树

1.树的基本名词

结合下图来对树的一些基本术语和概念做说明
C语言数据结构之树与二叉树的基本概念_第1张图片
1.考虑节点K。根A到节点K的唯一路径上的任意结点,称为节点K的祖先结点。结合B是结点K的祖先结点,而结点K则是结点B的子孙结点。路径上最接近结点K的结点E称为K的双亲结点,而K为节点E的孩子结点,如结点K和结点L有相同的双亲结点E,及K和L为兄弟结点
2.结点的度:子结点的个数。
3.树的度:结点的最大度数。
4.分支结点:度大于0的结点。
5.叶子节点:度为0的结点。
6.结点的层次:根节点为第一层。
7.结点的深度:从根节点开始,自顶向下逐层累加。
8.结点的高度:从叶节点开始,自底向上逐层累加。
9.树的高度:树种结点的最大层数。
10.有序树:树中结点的子树从左到右是有次序的,不能交换,其结点与其子结点从左到右顺序出现是有关联的。
11.无序树:与有序树相反。
12.路径和路径长度:树中两个结点之间的路径是由这两个结点之间所经过的结点序列构成的,而路径长度是路径上所经过的边的个数。
13.森林:给n棵树加一个根结点,就成为一棵树,一棵树去掉根结点,则成为森林。

2.树的性质

1.树的结点数等于所有结点的度数加1。
2.度为m中第i层的最多有m(i-1)个结点。
3.高度为H的m叉树最多有(mh-1)/(m-1)个结点。

推导方式:
根据公式2可知,每层上最多有m(i-1)
则第一层有1个结点,
第二层有m个结点,
第三层上有m2个结点,
依次类推,
则第h上有m(h-1)个结点。
所有总的结点数等于 1+m+m2+m3+……+m(h-1)
根据等比数列求和公式可知总节点数为(mh-1)/(m-1)
4.具有n个结点的m叉树的最小高度为H=⌈logm(n(m-1)+1)⌉ (向上取整)
推导方式
根据第三个公式n=(mh-1)/(m-1)
则H=⌈logm(n(m-1)+1)⌉ (向上取整)

2.二叉树

1.二叉树的度最大为2,且二叉树有左右之分,不能颠倒。
2.二叉树具有5种形态
C语言数据结构之树与二叉树的基本概念_第2张图片
3.二叉树与度为2的树的区别
a:度为2的树至少有3个结点,而二叉树有上述5种形态
b:度为2的树若只有一个子结点,则无所谓左或者右,二叉树严格区分左右子树。

1.满二叉树

结点节点都在最下边的一层,且除叶子结点以外,每个结点的度数都是2.
C语言数据结构之树与二叉树的基本概念_第3张图片
自根结点按层次编号(从1开始)则有:对编号是i的结点,双亲为⌊i/2⌋(向下取整),左孩子是2i,右孩子是2i+1

2.完全二叉树

设有一个高度为h,有n个结点的二叉树,当且仅当其每一个结点都与高度为h的满二叉树中编号为1-n的结点一 一对应时,称为完全二叉树。
C语言数据结构之树与二叉树的基本概念_第4张图片
特点:
1.若i<=⌊n/2⌋,则i为分支结点,否则为叶子结点。
2.叶子结点只能出现层次最大的两层上,最大层的叶子结点,都依次排列在该层最左边的位置上。
3.若有度为1的结点,则最多有1个,并且这个结点只能有左孩子,不能有右孩子。
4.按层次编号后,一旦出现某结点(编号为i)为叶子结点或只有左孩子,则编号大于i的结点均为叶子结点
5.若n为奇数,则分支结点都同时有左孩子和右孩子,若n为偶数,则编号最大的分支结点只有左孩子,没有右孩子,其他结点都有。

3.二叉树的性质

1.非空二叉树上叶子结点数等于度为2的结点数加1,即N0=N2+1
推导过程
设有N个结点,B个分支
则有:B+1=N
分支都是由结点射出来的,
度为2的结点射出两个分支
度为1的结点射出1个分支
度为0的结点射出0个分支
则有:B=N1+2N2
所以有N1+2N2+1=N
又因为N0+N1+N2=N,*
即:N1+2N2+1=N0+N1+N2
所以有N0=N2+1
2.非空二叉树第K层上最多有2k-1个结点(k>=1)
3.高度为h的二叉树至多有2h+1个结点。
4.对二叉树进行编号则有:
a.当i>1时,结点i的双亲结点编号为⌊i/2⌋
b.当2i<=n时,结点i的左孩子编号为2i,否则没有左孩子
c.当2i+1<=n时,结点i的右孩子编号为2i+1,否则没有右孩子
d.结点i所在深度为⌊log2i⌋+1
e.具有n个(n>0)结点的完全二叉树的高度为⌈log2(n+1)⌉
推导过程:
因为n=2h-1
所以2h=n+1
所以有h=⌈log2(n+1)⌉

你可能感兴趣的:(数据结构C语言版)