二叉樹及存儲結構
阿新 • • 發佈:2017-11-04
重要性 二叉 結點 有一個 .cn blog 中序 判斷 ges
本文的結構:
- 二叉樹的基本形態
- 二叉樹的重要性質
- 二叉樹的抽象數據類型定義
- 二叉樹的存儲結構
二叉樹T:一個有窮的節點集合。這個集合可以為空,若不為空,則它是由根節點和稱為其左子樹TL和右子樹TR的兩個不相交的二叉樹組成
二叉樹的五種基本形態:
- (a) 空樹
- (b) 有一個結點
- (c) 右子樹為空
- (d) 左子樹為空
- (e) 有左右子樹
二叉樹的重要性質:
- 一個二叉樹第i層的最大節點數為:2i-1,i >=1;
- 深度為k的二叉樹有最大結點總數為 2k-1,k>=1;
- 對任何非空二叉樹T,若n0表示葉節點的個數,n2是度為2的非葉節點的個數,那麽兩者滿足關系n0=n2+1;(如下圖)
例題:有一顆二叉樹,其兩個兒子的結點個數為15個,一個兒子的結點個數為32個,問該二叉樹的葉結點個數是多少?解:n2=15,n1=32,n0=n2+1=16;
二叉樹的抽象數據類型定義
類型名稱:二叉樹
數據對象集:一個有窮的結點集合,若不為空,則由根節點和左右二叉子樹組成
操作集:
- Boolean IsEmpty(BinTree BT):判斷BT是否為空;
- void Traversal(BinTree BT):遍歷,按某順序訪問每個結點
- BinTree CreatBinTree():創建一個二叉樹
常見的遍歷方法:
- void PreOrderTraversal(BinTree BT):先序---->根、左子樹、右子樹
- void InOrderTraversal(BinTree BT):中序--->左子樹、根、右子樹
- void PostOrderTraversal(BinTree BT):後序--->左子樹、右子樹、根
- void LevelOrderTraversal(BinTree BT):層次遍歷--->從上到下、從左到右
二叉樹的存儲結構
- 順序存儲結構:(用數組實現),完全二叉樹:從從上到下、從左到右順序呢存儲n個結點的完全二叉樹的節點父子關系;把結點放到數組裏很簡單,但是如何快速的找出結點之間的關系?一般二叉樹也可以采用這這種結構(將二叉樹補全),但會造成空間浪費。
- 鏈表存儲
二叉樹及存儲結構