文章目录
树的定义
树(Tree)是n(n≥0)个结点的有限集,它为空树或非空树
对于非空树T:
- 有且仅有一个称之为根的结点
- 除根节点以外的其余结点可分为m(m>0)个互补相交的有限集T1,T2…Tm,其中每一个集合本身又是一颗树,并且称为根的子树
例如上图:A是根结点,T1={B,E,F,G},T2={C,H},T3={D,I,J}
树的基本术语
基本术语:
- 结点的度:结点的子树个数(A结点度为3)
- 树的度:树的所有结点的度的最大值(为3)
- 叶子结点:度为0的结点(E、F、H…)
- 非终端结点:度不为0的结点(A、B、C、D)
- 双亲和孩子:结点的子树的根称为该结点的孩子,相应的,该结点称为孩子的双亲(C是H的双亲,H是C的孩子)
- 兄弟:同一双亲的孩子之前互称兄弟(E、F、G)
- 祖先:从根到该结点所经分支上的所有结点(F的祖先是A、B)
- 子孙:以某结点为根的子树中的任一结点都是(B的子孙为E、F、G)
- 层次:结点的层次从根开始定义起,根为第一层,根的孩子为第二层。
- 堂兄弟:双亲在同一层的结点互为堂兄弟(H与E、F、G、I、J)
- 树的深度:树中结点的最大层次称为树的深度或高度(图中为3)
- 森林:是m(m≥0)棵互不相交的树的集合
二叉树
二叉树是n(n≥0)个结点所构成的集合,它为空树(n=0)或非空树
对于非空树T:
- 有且仅有一个称之为根的结点
- 除根节点以外的其余结点分为两个互不相交的子集T1和T2,且T1和T2本身又都是二叉树
1、二叉树与树的主要区别
- 二叉树的每个结点
至多只有两棵子树
(即二叉树中不存在度大于2的结点) - 二叉树的子树
有左右之分
,其次序不能颠倒
2、 二叉树的五种基本形态
(a):空二叉树
(b):仅有根结点的二叉树
(c):右子树为空的二叉树
(d):左、右子树均非空的二叉树
(e):左子树为空的二叉树
3、 二叉树的性质
- 在二叉树的第 i 层上至多有
2^(i-1)
个结点(i≥1) - 深度为 k 的二叉树至多有
2^k-1
个结点(k≥1) - 对任何一棵二叉树T,如果其终端结点数为n0,度为2的结点数为n2,则
n0=n2+1
4、满二叉树、完全二叉树:
5、完全二叉树的两个性质
二叉树的存储结构
1、顺序存储结构
#define MAXTSIZE 100 //二叉树的最大结点数
typedef TElemType SqBiTree[MAXTSIZE];//0号单元存储根结点
SqBiTree bt; //数组bt
图中的‘NO’和‘^’表示不存在此结点
由此可见,这种顺序存储结构仅适用于完全二叉树,对一般二叉树会导致存储空间的极大浪费,所以,一般二叉树更适合链式存储结构
2、链式存储结构
typedef struct BiTNode
{
TElemType data; //结点数据域
struct BiTNode *lchild,*rchild; //左右孩子指针
}BiTNode,*BiTree;
二叉树的结点:
二叉树的存储结构:
链表存储结构:
借鉴:《数据结构》严蔚敏