1. 程式人生 > >二叉樹及存儲結構

二叉樹及存儲結構

重要性 二叉 結點 有一個 .cn blog 中序 判斷 ges

本文的結構:

  1. 二叉樹的基本形態
  2. 二叉樹的重要性質
  3. 二叉樹的抽象數據類型定義
  4. 二叉樹的存儲結構

二叉樹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;

二叉樹的抽象數據類型定義

類型名稱:二叉樹

數據對象集:一個有窮的結點集合,若不為空,則由根節點和左右二叉子樹組成

操作集

  1. Boolean IsEmpty(BinTree BT):判斷BT是否為空;
  2. void Traversal(BinTree BT):遍歷,按某順序訪問每個結點
  3. BinTree CreatBinTree():創建一個二叉樹

常見的遍歷方法

  1. void PreOrderTraversal(BinTree BT):先序---->根、左子樹、右子樹
  2. void InOrderTraversal(BinTree BT):中序--->左子樹、根、右子樹
  3. void PostOrderTraversal(BinTree BT):後序--->左子樹、右子樹、根
  4. void LevelOrderTraversal(BinTree BT):層次遍歷--->從上到下、從左到右

二叉樹的存儲結構

  • 順序存儲結構:(用數組實現),完全二叉樹:從從上到下、從左到右順序呢存儲n個結點的完全二叉樹的節點父子關系;技術分享把結點放到數組裏很簡單,但是如何快速的找出結點之間的關系?技術分享一般二叉樹也可以采用這這種結構(將二叉樹補全),但會造成空間浪費。技術分享
  • 鏈表存儲

技術分享

二叉樹及存儲結構