这周学习了数据结构中的树,看了郝斌的数据结构视频。。。虽然讲的很浅很浅但是对于我这么笨的人来说刚好能看懂。又通过小组学姐的讲解对树有了一个初步的认识,现在将学到的知识总结一下=、=
一、树的定义
树是由n(n>=0)个节点构成的有限集合,n = 0时称为空树。在任意一颗非空树中:
1)、有且只有一个根节点
2)、除根节点以外,其余节点分成m(m > 0)个互不相交的有限集合T1、T2、。。。Tm,其中每一个集合又都是一棵树
=、=好吧,我承认这是抄书的。下图就一棵树,怎么长得不像树。。。确实不像树,像葡萄(=、=)
(图片来自维基百科)
二、树中的术语
1)、结点:包含一个数据元素或指向其他元素的索引(就是上图中的一个小圆圈=、=)
2)、结点的度:一个结点的子树个数(上图中一个圆圈后边跟的几条线,注意是它后边挂的,不包括挂它的那根)
3)、树的度:树中结点的最大度
4)、终端结点(叶子结点):度为零的结点(图中那些挂在最后孤单的那些圆圈=、=)
5)、分支结点:度不为零的结点,也成非终端结点
6)、孩子结点:一个结点对的直接后继(就是直接挂在它后边的圆圈)
7)、双亲结点:一个结点的直接前驱(挂它的那个圈、问:为什么叫双亲结点而不叫父结点或母结点?答:男女平等=、=)
8)、结点的层次:根为第一层,根的孩子结点为第二层,以此类推。。。
9)、树的高度(深度):树中结点的最大层次
10)、兄弟结点:同一双亲结点的孩子结点之间互称为兄弟结点(例如上图中的B和C。ps:我认为叫基友结点更好=、=)
11)、祖先结点:从根结点到该结点所经过的所有结点(例如上图中J的祖先结点是A、B、E)
12)、子孙结点:以某结点为根的子树中的任一结点都称为该结点的子孙结点
13)、有序树:结点的子树从左至右有顺序,否则,称为无序树
14)、森林:好多棵不相交的树称为森林
三、二叉树
1)、定义:
(1)、二叉树定义:每个结点至多只能有两棵子树且有左右之分,顺序不可以颠倒的树。
(2)、满二叉树:从深度为k且有2^k - 1个结点的二叉树称为满二叉树,在满二叉树中煤层的结点都是满的(如下图)
(3)、完全二叉树:根据满二叉树的编号原则,深度为k,结点为n的二叉树,如果结点1~n的位置序号正好对应满二叉树的1~n则称此树为完全二叉树(如下图、其实就是把满二叉树的最后那行从右向左开始删,删几个都无所谓,但一定要从最后一行的右开始删不能越过一个删另一个。删完剩下的就是个完全二叉树)
2)、奇葩性质:
(1)、二叉树的第i层上至多有2^(i - 1)个结点(i >= 1)
(2)、高度(深度)为k的二叉树最大结点数为2^k - 1(k > 0)
(3)、任一二叉树如果叶子结点的个数为m,度数为2的结点个数为n则有:m = n + 1
(4)、具有n个结点的完全二叉树深度是[log2n] + 1。[x]为取整函数(不超过x的最大整数)
(5)、如果将一棵完全二叉树从上到下,从左到右对结点编号为1、2、3。。。,n,然后将此二叉树中各个结点顺序存入地存放于一个一维数组中,并简称编号为j的节点为j(1 <= j <= n),则有如下结论成立:
{
1、若j = 1,则结点j为根节点,为双亲,否则j的双亲 为[j/2]
2、若2j <= n,则结点j的左孩子为2j,否则无左孩子,即编号为j且满足2j > n的结点为叶子节点
3、若2j + 1 <= n,则结点j的右孩子为2j + 1,否则无右孩子
4、若结点j序号为奇数且不等于1,则它的左兄弟为j - 1
5、若结点j的序号为偶数且不等于n,它的右兄弟为j + 1
}