树与二叉树

1. 树的基本概念

1)结点的度:该结点所有孩子结点的总数量。
2)树的度:树内各个结点的度的最大值。
3)叶子结点/非叶子结点:度为0/不为0的结点为叶子结点/非叶子结点。
4)结点的层次:定义根结点为第一层;若某结点在第i层,则其子树的根就位于第i+1层。
5)树的高度(深度):树中结点的最大层次,即离根结点最远的地方。
6)有序树/无序树:若可以将树中结点的各子树看成从左到右是有次序的,则它是有序树,否则则为无序树。其最左边的子树的根称为第一个孩子,最右边的称为最后一个孩子。
7)森林:m棵互不相交的树的集合。因此对于树中的每一个结点来说,其子树的集合即为森林。

============================
因此可以推出的一些基本性质

1)一棵树拥有的结点个数等于树内所有结点度数+1;
2)度为m的树,第i层上最多有mi-1个结点;
3)高度为h的m叉树,最多拥有(mh-1)/(m-1)个结点。

2. 二叉树的基本概念

1)二叉树定义:每个结点最多只有2棵子树(即二叉树中不存在度大于2的结点),并且有左右子树之分,次序不能随意颠倒的有序树。
2)满二叉树:高度为h,且拥有2h-1个结点的二叉树。(满结点)
满二叉树

3)完全二叉树:并非满结点,但是每一层结点必须满足从左到右不能有“断档”。
完全二叉树

============
因此我们又可以推出二叉树的一些性质:

1)在二叉树中,第i层上最多有2i-1个结点(i>=1)。
2)高度为h的二叉树,最多拥有2h-1个结点(h>=1)(等比数列求和)。
3)n结点的完全二叉树的高度为[log n]<=x + 1。
4)n层完全二叉树中,对任意结点i(1<=i<=n),则有i = 1则表示是根结点;若i>1,则其父节点为i/2,子结点为2i, 2i+1。(注意边界,可以参看“顺序存储结构”图辅以理解)
5)n个结点有n+1个空指针(无左右后继)

3. 二叉树的存储结构

1)顺序存储结构——仅适用于完全二叉树
完全二叉树顺序存储结构

如果用在一般二叉树,则是
一般二叉树顺序存储结构
“#”表示该结点为NULL。
所以我们可以推出如果是一棵只有k个结点深度为k的单支树(即树中不存在度为2的结点),需要长度为2k-1的数组来存储,严重浪费空间。
单支树

2)链式存储结构——专治一般二叉树
链式结构一般至少包含3个域:数据、左子树、右子树,此时称为二叉链表。然而有时为了方便查找父节点,在二叉链表的基础上再添加一个域:“父节点”,此时称为三叉链表。
一般二叉树链式存储结构

reference:
严蔚敏.数据结构C语言版

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章