二分查詢判定樹怎麼畫 今日乾貨 樹

2021-10-18 02:00:11 字數 2664 閱讀 8160

客觀世界中許多事物存在層次關係

其中,人類社會家譜如下圖所示:

通過上述所說的分層次組織,能夠使我們在資料的管理上有更高的效率!那麼,對於資料管理的基本操作——查詢,我們如何實現有效率的查詢呢?

查詢:根據某個給定關鍵字k,從集合r中找出關鍵字與k相同的記錄

靜態查詢:集合中記錄是固定的,即對集合的操作沒有插入和刪除,只有查詢

動態查詢:集合中記錄是動態變化的,即對集合的操作既有查詢,還可能發生插入和刪除(動態查詢不在我們考慮範圍內)

2.1 靜態查詢

2.1.1 方法1:順序查詢

/* c語言實現 */int sequentialsearch (statictable *tbl, elementtype k)
順序查詢演算法的時間複雜度為o(n)

2.1.2 方法2:二分查詢(binary search)

假設n個資料元素的關鍵字滿足有序(比如:小到大),即k1

例:假設有13個資料元素,按關鍵字由小到大順序存放。二分查詢關鍵字為444的資料元素過程如下圖:

仍然以上面13個資料元素構成的有序線性表為例,二分查詢關鍵字為43的資料元素如下圖:

/* c語言實現 */int binarysearch (statictable *tbl, elementtype k) return notfound; // 查詢不成功,返回-1}
二分查詢演算法具有對數的時間複雜度o(logn)

二分查詢演算法雖然解決了查詢的時間複雜度問題,但是對於資料的插入和刪除確是o(n)的,因此有沒有一種資料結構,既可以減少資料查詢的時間複雜度,又可以減少資料的插入和刪除的複雜度呢?

除了使用上述兩個方法進行關鍵字的查詢,我們還可以通過二叉樹這種資料結構完成關鍵字的查詢。

從上圖可以看出,如果我們需要尋找數字8,可以通過以下4步實現(可能看不懂,未來會看得懂):

根節點6小於8,往6的右子節點9找

結點9大於8,往9的左子結點7找

結點7小於8,往7的左子結點找

找到8

樹(tree):n(n≥0)

n(n≥0)個結點構成的有限集合。

牢記樹有以下3個特性:

子樹是不相交的;

除了根結點外,每個結點有且僅有乙個父結點;

一顆n個結點的樹有n-1條邊

5.1 非樹

5.2 樹

結點的度(degree):結點的子樹個數

樹的度:樹的所有結點中最大的度數

葉結點(leaf): 度為0的結點

父結點(parent):有子樹的結點是其子樹的根結點的父結點

子結點(child):若a結點是b結點的父結點,則稱b結點是a結點的子結點;子結點也稱孩子結點

兄弟結點(sibling):具有同一父結點的各結點彼此是兄弟結點

路徑和路徑長度:從結點n1,n2,⋯,nk , ni+1的父結點。路徑所包含邊的個數為路徑的長度

祖先結點(ancestor):沿樹根到某一結點路徑上的所有結點都是這個結點的祖先結點

子孫結點(descendant):某一結點的子樹中的所有結點是這個結點的子孫

結點的層次(level):規定根結點在1層,其它任一結點的層數是其父結點的層數加1

樹的深度(depth):樹中所有結點中的最大層次是這棵樹的深度

7.1 樹的鍊錶表示

上圖所示樹的鍊錶表示法有很大的缺陷,假設樹的深度非常大,並且不能保證所有樹的子結點都有3個,那麼會造成很大程度的浪費。

7.2 樹的鍊錶(兒子-兄弟)表示法

上圖所示的樹的表示方法,已經足夠完美了,但是如果我們把鍊錶表示的樹旋轉45°角,會發現如下圖所示:

經過45°角的旋轉,我們會發現一顆二叉樹(乙個結點至多擁有2個子結點的樹),也就是說最普通的樹其實可以通過二叉樹表示,也就是說我們只要把二叉樹研究透了,我們即研究透了樹。

二分查詢樹(BST)

這個出現頻率比較高,為了防止忘了,寫一下好了 二分查詢樹的性質 來自維基百科 若任意節點的左子樹不空,則左子樹上所有結點的值均小於或等於它的根結點的值 任意節點的右子樹不空,則右子樹上所有結點的值均大於它的根結點的值 任意節點的左 右子樹也分別為二叉查詢樹。沒有鍵值相等的節點 英語 no dupli...

extra1 二分查詢與二叉判定樹

目錄二叉判定樹是用於描述解決問題的思路,比如可以使用判定樹描述n個數的比較過程,是一種對過程的描述。它也可以用於描述二分查詢 即折半查詢,以下都作二分查詢 的過程。描述二分查詢的二叉判定樹,我們也可以叫折半查詢判定樹,從這樣的判定樹,我們可以分析二分查詢演算法的效率,當n 0時,折半查詢判定樹為空 ...

資料結構樹之二分查詢樹

二叉查詢樹 binary search tree 也稱有序二叉樹 ordered binary tree 排序二叉樹 sorted binary tree 是指一棵空樹或者具有下列性質的二叉樹 若任意節點的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值 任意節點的右子樹不空,則右子樹上所有結...