二叉樹總結-不斷更新

二叉樹彙總
即將要找工作,刷題時發現對二叉樹的好多概念並不是很明白,畢竟沒學過數據結構。。。特此整理,不斷補充。。。。
一些概念
節點,結點
這兩種寫法在實際中都有,但是並沒有區別,起初以爲節點是所有的點,結點是不包括葉子結點。以下不做區分
二叉樹中有節點和葉子節點。
術語:
樹的結點:包含一個數據元素及若干指向子樹的分支;
孩子結點:結點的子樹的根稱爲該結點的孩子;
雙親結點:B 結點是A 結點的孩子,則A結點是B 結點的雙親;
兄弟結點:同一雙親的孩子結點; 
堂兄結點:同一層上結點;
結點層:根結點的層定義爲1;根的孩子爲第二層結點,依此類推;
樹的深度:樹中最大的結點層
結點的度:結點子樹的個數
葉子結點:也叫終端結點,是度爲 0 的結點;
分枝結點:度不爲0的結點;
類型
(1)完全二叉樹——若設二叉樹的高度爲h,除第 h 層外,其它各層 (1~h-1) 的結點數都達到最大個數,第h層有葉子結點
,並且葉子結點都是從左到右依次排布,這就是完全二叉樹。
(2)滿二叉樹——除了葉結點外每一個結點都有左右子葉且葉子結點都處在最底層的二叉樹。
(3)平衡二叉樹——平衡二叉樹又被稱爲AVL樹(區別於AVL算法),它是一棵二叉排序樹,且具有以下性質:它是一棵空樹
或它的左右兩個子樹的高度差的絕對值不超過1,並且左右兩個子樹都是一棵平衡二叉樹
(4)二叉查找樹(Binary Search Tree),(又:二叉搜索樹,二叉排序樹)它或者是一棵空樹,或者是具有下列性質的二叉樹: 若它的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值; 若它的右子樹不空,則右子樹上所有結點的值均大於它的根結點的值; 它的左、右子樹也分別爲二叉排序樹

節點數:
二叉樹的第i層至多有2^{i-1}個結點;深度爲k的二叉樹至多有2^k-1個結點


度:
通俗的講度就是二叉樹中連接節點和節點間的連線,因此可推出若有n個節點,則有n-1個度,度爲0的節點
是葉子節點,二叉樹中度節點的度只可能是,0,1,2
二叉樹中有度爲0的節點數等於度爲2的節點數加1,也就是n0=n2+1,推理如下:
k:總度數
k+1:總節點數
n0:度爲0的節點
n1:度爲1的節點
n2:度爲二的節點
則可列出以下公式:
k=n1+2n2;
k+1=n0+n1+n2;
可得:n0=n2+1
完全二叉樹中度爲1的節點數只可能是1或0.no=n2+1因此完全二叉樹很容易得到節點信息




遍歷:

二叉樹有三種遍歷方式,前序遍歷後序遍歷,中序遍歷

遇見較多的題:

前序遍歷結果序列爲abdefgc,中序遍歷結果序列爲debgfac,請問後序遍歷結果序列?

由先序序列和中序序列可以唯一確定一棵二叉樹

先序序列第一個節點是根節點,中序序列中根節點將序列分爲左右子樹的中序序列;在先序序列中找到左右子樹的序列,其第一個節點是左右子樹的根節點,如此遞歸就能確定整個二叉樹的形態。
        其算法實現步驟如下:
  1.   根據先序序列確定樹的根節點
  2. 根據根節點在中序序列中劃分出二叉樹的左、右子樹包含哪些節點。然後根據左右子樹節點在先序序列中的次序可以確定子樹的根節點,即回到步驟 1.
  3. 如此重複上述步驟,知道每棵子樹僅有一個節點爲止,如下圖所示。
 
        從而其後序遍歷結果爲 : edgfbca 





發佈了31 篇原創文章 · 獲贊 13 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章