樹(1)--樹和二叉樹的基本定義
一:樹
1.樹的表示方式:
(1)圖形表示法(分支圖表示法)
(2)巢狀集合表示法
(3)廣義表表示法
( A ( B ( E ,F( K, L ), ), C ( G ), D ( H , I, J ) )
(4)目錄表示法
(5)左孩子-右兄弟表示法
2.樹結構與線性結構的比較:
線性結構:第一個結點無前驅,最後一個結點無後繼,其他結點有一個前驅和一個後繼;
樹 結 構:根節點無前驅,多個葉子節點無後繼,其他結點只有一個前驅和多個後繼。
3.樹的儲存結構:
(1).順序儲存:
可規定為: 從上至下、從左至右將樹的結點依次存入記憶體
重大缺陷:復原困難(不能唯一復原就沒有實用價值)
(2).鏈式儲存:
指標域:一個前驅指標,n個後繼指標
存在問題:若規定等長結構體(即每個結構體有n個後繼指標),則浪費空間;若規定不等長,則要定義多種結構體,操作起來不方便。
*解決思路:先研究最簡單、最有規律的樹(二叉樹), 然後設法把一般的樹轉化為簡單樹(二叉樹)。
二.二叉樹.
1.性質:
1): 在二叉樹的第i層上至多有2的n-1次方個結點(i>=1)
2).深度為k的二叉樹至多有2的k次方-1個結點(k>=1)
3).對於任何一棵二叉樹,若2度的結點數有n2個,則葉子數(n0)必定為n2+1 (即n0=n2+1)
2.滿二叉樹:
1)深度為k的節點數為2的k次方-1.
2).滿二叉樹第k層的結點個數比其1~k-1層所有結點個數之和多一個。
3.完全二叉樹:樹中的1~n個結點的位置與滿二叉樹的1~n個節點的位置相同.
1) 葉子結點只可能在層次最大的兩層上出現;
2) 對任一結點,若其右分支下的子孫的最大層次 為 L,則其左分支下的子孫的最大層次必為 L 或 L+1。
3)具有n個結點的完全二叉樹的高度為└ log2n ┘ + 1(向下取整)
4)具若對含n個結點的完全二叉樹從上到下且從左至右進行1至n的編號,則對二叉樹中任意一個編號為i的結點:
(1)若i=1,則該結點是二叉樹的根,無雙親; 否則,編號為└ i/2 ┘的結點為其雙親結點;
(2)若2i > n,則該結點無左孩子; 否則,編號為2i的結點為其左孩子結點;
(3)若2i+1 > n,則該結點無右孩子結點; 否則,編號為2i+1的結點為其右孩子結點。
4.儲存結構:
*順序儲存:
typedef TElemType SqBiTree[MAX_TREE_SIZE];
// 0號單元儲存根結點
SqBiTree bt;
1).這種結構只適合滿二叉樹和完全二叉樹
因為這樣可以恢復到原來對應的唯一二叉樹,比如C的左右孩子依次為第6和第7個,陣列也恰好對應
2).當二叉樹不再是滿二叉樹和完全二叉樹時,我們只能這樣做:把缺少的結點在陣列中的位置讓它為空
這樣一來我們在陣列中就會發現會有很多位置空著在,這樣就浪費了空間,對於
這樣的二叉樹(最壞情況):
就會分配2的K次方-1個空間,造成空間的極大浪費!!
*鏈式儲存:
(1)儲存結構:
1).二叉連結串列
typedef struct BiTNode
{
TElemType data; // 結點資料
struct BiTNode *lchild,*rchild; // 左、右孩子指標
}BiTNode, *BiTree;
2).三叉連結串列:
typedef struct TriTNode {
TElemType data;
struct TriTNode *lchild,*rchild; // 左右孩子指標
struct TriTNode *parent;
} TriTNode, *TriTree;
相關文章
- 樹的定義 基本術語
- 滿二叉樹、完全二叉樹、平衡二叉樹、二叉搜尋樹(二叉查詢樹)和最優二叉樹二叉樹
- 樹和二叉樹簡介二叉樹
- 平衡樹和二叉樹的區別二叉樹
- 二叉樹 部分定義與性質二叉樹
- 樹:基本樹形
- 資料結構中的樹(二叉樹、二叉搜尋樹、AVL樹)資料結構二叉樹
- 資料結構之樹結構概述(含滿二叉樹、完全二叉樹、平衡二叉樹、二叉搜尋樹、紅黑樹、B-樹、B+樹、B*樹)資料結構二叉樹
- 二叉搜尋樹和二叉樹的最近公共祖先二叉樹
- 二叉樹、B樹以及B+樹二叉樹
- 平衡二叉樹,B樹,B+樹二叉樹
- 二叉樹的基本運算2二叉樹
- 平衡二叉樹(AVL樹)和 二叉排序樹轉化為平衡二叉樹 及C語言實現二叉樹排序C語言
- 相同二叉樹和鏡面二叉樹問題二叉樹
- 二叉樹基本原理二叉樹
- 二叉查詢樹和笛卡爾樹
- 資料結構筆記——二叉樹的定義和性質資料結構筆記二叉樹
- 二叉樹排序樹的建立,遍歷和刪除二叉樹排序
- 夜刷:平衡二叉樹的基本操作二叉樹
- 排序二叉樹和平衡二叉樹排序二叉樹
- Chapter 3 樹與二叉樹APT二叉樹
- n叉樹vs二叉樹二叉樹
- 二叉樹(順序儲存二叉樹,線索化二叉樹)二叉樹
- 玩轉二叉樹(樹的遍歷)二叉樹
- BST(二叉搜尋樹)、AVL樹、紅黑樹、2-3樹、B樹、B+樹、LSM樹、Radix樹比較
- 手擼二叉樹——AVL平衡二叉樹二叉樹
- 手擼二叉樹——二叉查詢樹二叉樹
- 重學資料結構(六、樹和二叉樹)資料結構二叉樹
- 重學資料結構之樹和二叉樹資料結構二叉樹
- 資料結構(樹):二叉樹資料結構二叉樹
- C++樹——遍歷二叉樹C++二叉樹
- 霍夫曼樹(最優二叉樹)的實現二叉樹
- 二叉樹二叉樹
- 資料結構的故事之二叉樹, 字首樹, N叉樹資料結構二叉樹
- 二叉樹的子結構、深度以及重建二叉樹二叉樹
- 【LeetCode-二叉樹】二叉樹前序遍歷LeetCode二叉樹
- 判斷二叉樹是否為滿二叉樹二叉樹
- 十三、Mysql之平衡二叉樹(AVL樹)MySql二叉樹
- 平衡二叉樹(AVL樹),原來如此!!!二叉樹