樹,二叉樹,查找算法總結


一。思維導圖

關於樹和二叉樹的思維導圖;

關於查找算法的思維導圖;

 

二。重要概念的筆記

1. 樹的定義
樹是一種數據結構,它是由n(n>=1)個有限節點組成一個具有層次關系的集合。

它具有以下的特點:
(1) 每個節點有零個或多個子節點;
(2) 沒有父節點的節點稱為根節點;
(3) 每一個非根節點有且只有一個父節點;
(4) 除了根節點外,每個子節點可以分為多個不相交的子樹;

重要術語概念

結點的度:結點擁有的子樹的數目。
葉子:度為零的結點。
分支結點:度不為零的結點。
樹的度:樹中結點的最大的度。
層次:根結點的層次為1,其余結點的層次等於該結點的雙親結點的層次加1。
樹的高度:樹中結點的最大層次。
無序樹:如果樹中結點的各子樹之間的次序是不重要的,可以交換位置。
有序樹:如果樹中結點的各子樹之間的次序是重要的, 不可以交換位置。

樹的相關性質:

1. 樹中的結點數 = 所有結點的度數+1;度數之和=分支數之和;分支數=結點數-1.
 2.度為m的樹中,第i層上至多有m^i-1個結點(i>=1).

2.二叉樹的定義

二叉樹是每個節點最多有兩個子樹的樹結構。它有五種基本形態:二叉樹可以是空集;根可以有空的左子樹或右子樹;或者左、右子樹皆為空。

 

二叉樹的性質:
性質一:在二叉樹的第 i 層上至多有2i-1 個結點(i≥1)
性質二:深度為 k 的二叉樹上至多含 2k-1 個結 點(k≥1)
性質三:對於任何一個二叉樹T,如果其終端結點數為n0,度為2的結點數為n2,則n0=n2+1。
性質四:具有n個結點的完全二叉樹的深度為[log2n] +1

性質五:如果有一顆有n個節點的完全二叉樹的節點按層次序編號,對任一層的節點i(1<=i<=n)有
    1.如果i=1,則節點是二叉樹的根,無雙親,如果i>1,則其雙親節點為[i/2],向下取整
    2.如果2i>n那么節點i沒有左孩子,否則其左孩子為2i
    3.如果2i+1>n那么節點沒有右孩子,否則右孩子為2i+1

3.特殊二叉樹有兩個,一個是滿二叉樹,另一個為完全二叉樹。

4.二叉樹的存儲結構:
存儲結構:2種

順序存儲;完全二叉樹上編號為i的結點元素存儲在某個數組下標為i-1的分量中,然后通過一些方法確定結點在邏輯上的父子和兄弟關系。
特點:一組地址連續的存儲單元存儲各結點(如一維數組);自根而下、自左而右存儲結點; 按完全二叉樹上的結點位置進行編號和存儲。
缺點:空間利用率太低。

鏈式存儲;鏈式結構是指用一個鏈表來存儲一棵二叉樹,二叉樹中的每個結點用鏈表的一個鏈結點來存儲。在二叉樹中,結點結構通常包括若干數據域和若干指針域。二叉鏈表至少包含3個域:數據域data、左指針域lchild和右指針域rchild,如下圖所示:

 

5。遍歷二叉樹

 

 遍歷方法:
先序遍歷(DLR):根結點、左子樹、右子樹;
中序遍歷(LDR):左子樹、根結點、右子樹;
后序遍歷(LRD):左子樹、右子樹、根結點;

若x是二叉中序線索樹中的一個有左孩子結點,且x不為根,則x的前驅是x的左子樹中的最右結點。
對樹的訪問沒有中根遍歷。
樹的后根遍歷與對應二叉樹的中根遍歷順序是一致的。

3。二叉排序樹二叉排序樹的定義

二叉排序樹(BST),也叫二叉查找樹。二叉排序樹或者是一顆空樹,或者是一顆具有下列特性的非空二叉樹:
  1.若左子樹非空,則左子樹上所有結點關鍵字值均小於根結點的關鍵字值;
  2.若右子樹非空,則右子樹上所有結點關鍵字值均大於根結點的關鍵字值;
  3.左、右子樹本身也分別是一顆二叉排序樹。

二叉排序樹的插入:
插入的元素一定在葉結點上,若二叉排序樹為空,則插入結點應為根結點,否則,繼續在其左右子樹上查找。

線索二叉樹

定義;充分利用二叉鏈表中的空鏈域,將遍歷過程中結點的前驅、后繼信息保存下來。
若結點有左子樹,則其 LChild 域指向其 左孩子,否則 LChild 域指向其 前驅結點。
若結點有右子樹,則其 RChild 域指向其 右孩子,否則 RChild 域指向其 后繼結點。

平衡二叉樹
概念
平衡二叉樹是基於二分法的策略提高數據的查找速度的二叉樹的數據結構;
特點
平衡二叉樹是采用二分法思維把數據按規則組裝成一個樹形結構的數據,用這個樹形結構的數據減少無關數據的檢索,大大的提升了數據檢索的速度;
B樹和平衡二叉樹稍有不同的是B樹屬於多叉樹又名平衡多路查找樹。

.B-樹的查找:
查到某個葉結點,若相應指針為空,落入一個外部節點,表示查找失敗
B-樹的插入:
在查找不成功之后,需進行插入。關鍵字插入的位置必定在葉子結點層,有下列幾種情況:插入后,該結點的關鍵字個數n<m-1,不修改指針;插入后,該結點的關鍵字個數 n=m-1,則需進行"結點分裂“。
B+樹的查找:
直接從最小關鍵字開始進行順序查找所有葉節點鏈接成的線性鏈表。從B+樹的根節點出發一直找到葉節點為止。

哈希表

可以根據一個key值來直接訪問數據,因此查找速度快

實現哈希表我們可以采用兩種方法:
1、數組+鏈表
2、數組+二叉樹

 三。疑難問題

如何判斷一棵二叉樹是否是平衡二叉樹?

二叉樹三種周游(traversal)

平衡二叉樹的構造

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM