一、树(Tree)
树是一种以分支关系定义的层次结构,树是n(n>=0)个结点的集合。在任意一棵非空树中,有且仅有一个根结点。n>1时,除去根结点外,其他结点由m>0棵互不相交的子树构成。从而可以看出,树的结构定义是一个递归的定义,即在树的定义中又用到了树的定义。
1、树及其结点的相关性质
- 结点的度:该结点的子树的个数即为该结点的度。
- 树的深度或高度:树的最大层次即为的树的深度或者高度(从root结点到最远叶子结点的结点数量)。
2、结点分类
- 叶子结点和非叶子结点:度为0的结点为叶子结点,否则为非叶子结点。
- 双亲结点: 结点的根结点。
- 兄弟结点和堂兄第结点:双亲结点为同一结点的结点互为兄弟结点,双亲结点不同,但是双亲结点在同一层的结点互为堂兄弟结点。
- 从整个树的根结点到该结点上的所有经过的结点都成为祖先结点。
3、树的分类
有序树和无序树:树中任意结点的的子树的看成从左到右是有顺序的,即任意两个子树结点的顺序是不可以调换的。
4、树和森林之间的关系
森林是m(m>=0)棵互不相交的树的集合,对于每一棵树而言,每一个结点其下的子树构成了森林。树可以用一个根结点和森林的二元组来定义T(root,F),而F={T1,T2...},由此可以看出树既可以用树来递归定义,也可以用森林和树来递归定义。
二、二叉树(BinaryTree)
树中的结点的度至多为2的树为二叉树,二叉树是有序树,左右子树的顺序是不可以随意调换的,结点左边的子树叫左子树,结点右边的子树叫右子树,左右子树不可以随意调换。
1、二叉树的分类
- 普通二叉树(具备二叉树结点的度至多为2的特性)
- 完全二叉树(结点遵循从上到下,从左到右按顺序摆放。度为1的结点个数要么为1要么为0,而且度为1的结点只能在倒数第2层。)
- 满二叉树:满二叉树是一种特殊的完全二叉树,在
同样高度
的二叉树中,满二叉树
的叶子节点
数量最多
,总结点
数量最多。
2、二叉树的性质
- 第i(i>=1)层的结点个数是2^(i-1)。
- 高度或者深度为h的二叉树的结点总个数最大为(2^h)-1。
- 叶子结点个数n0=n2+1,可以根据二叉树的总边数T来证明。度为0的结点变数拥有0条边,度为1的结点拥有1条边,度为2的结点拥有2条边,即T=n1+n2。再除二叉树的根结点外每一个结点拥有一个父节点上游边,即T=n-1。根据n=n0+n1+n2及其上述关系可得n0=n2+1。
- 具有n个结点的完全二叉树,因为 2^(h-1) <= n < 2^h 可以推出=> h-1 <= log2n < h,最终可以得出h=log2n向下取整+1。
- 具有n个结点的完全二叉树,从上到下,从左到右从1开始编号。对于任意一个编号为i(1<i<=n),其双亲结点编号为i/2向下取整。如果当前2i>n,结点无左孩子结点;如果2i+1>n,结点无右孩子。
- 具有n个结点的完全二叉树,n0=n+1/2向下取整 n1+n2=n/2向上取整,也可以是n0=n/2向上取整 n1+n2=n+1/2向下取整,根据n0=n2+1和n=n0+n1+n2关系来证明。
3、存储方式
- 顺序存储方式
- 链式存储方式
4、实现及其相关操作算法代码讲解