資料結構與演算法基礎 模組三

2022-08-31 03:27:15 字數 2240 閱讀 9584

在昨天的分享中,主要是說明了相關樹的內容,那麼緊接著上一次的內容,來說一下查詢二叉樹的相關基本操作,在查詢二叉樹中,重要分為三種操作:

1、查詢 : 

①首先需要判斷key是否為根節點

②與當前的值進行比較,若小,進入左子樹,反之,進入右子樹。

③重複以上操作,直到找到

2、插入結點 

在查詢二叉樹中插入乙個結點需要分以下幾種情況,然後再分別進行相應的處理:

① 如果相同鏈值的結點已經在查詢二叉樹中,則不再插入。

② 如果查詢二叉樹為空樹,則以新結點為查詢二叉樹

③ 將要插入的結點的鍵值與插入後的父結點的鍵值比較,就能確定結點是父結點的左子結點還是右子結點,並進行相應的插入。

3、刪除結點 

再刪除結點的時候,需要考慮三種情況:

① 若待刪除的結點p是葉子結點,則直接刪除該結點

② 若待刪除的結點p只有乙個節點,則將這個子結點與待刪除的父節點值直接連線,然後刪除結點p

③若待刪除的節點p有兩個結點,則在其左子樹上,用中序遍歷尋找關鍵值最大的結點s,用結點s的值代替結點p的值,然後刪除結點s,結點s必屬於上述已經說明的①②情況。

例:

利用逐點插入法建立序列(50,72,43,85,75,20,35,45,65,30)對應的二叉排列樹以後,查詢元素30所需要進行幾次元素間的比較?

答:  五次比較

解析:首先,在我們做這個題目之前,需要回想一下我們在上乙個模組的最後與大家分享的知識點,二叉排序樹的建立方法。首先,我們需要確定乙個點為根節點,在這個題目中,顯而易見,根節點為50,那麼現在要比較接下來各數之間的大小,小於根節點的為左子樹,大於根節點的為右子樹。那麼現在我們先建立一顆二叉排序樹。

建立完成之後,再根據基本操作中查詢操作,一步一步進行查詢,比較大小,這裡有乙個訣竅,就是直接用30與跟結點比較,若大,在右反之在左,這樣會縮小我們查詢的範圍,提高效率。最後需要注意的一點是,有的人最後算下來的結果會是4次,是因為少了一次,就是30它和它自己本身的一次比較。

1.樹的路徑長度:在同樣結點的樹中,完全二叉樹的路長最短

2、權:權這個概念是人為定的。

3、帶權路徑長度:權*本身的鍵值

最後我們需要知道的是 ,哈夫曼樹是帶權路長最小的樹 (路長:路徑長度)

例:

假設有一組權值(5,29,7,8,14,23,3,11),下面我們將利用這組權值來構造哈夫曼樹

解析:第一步:以這八個權值作為根節點的權值構造具有8顆樹的森林;

第二步:從中選擇兩個根的權值作為最小的樹,3.5作為左右子樹來構造一顆新樹,並將這兩顆樹從森林中刪除,並將新樹新增進去。

第三步:重複第二步,直到森林中只有一顆樹為止。

需要注意的是,我們要知道,這八個權值,分別作為一顆空樹,不能說是一顆樹有了左右結點之後,他就不作為前面所做的空樹。

在我們之前講了呢麼多的樹時候,又有一種新的概念,線索二叉樹,首先我們需要明確一下,為什麼要有線索二叉樹:

簡單來說,線索二叉樹就是用來記錄二叉樹按某種遍歷之後所產生的前驅後繼關係。也就是說利用現有的空間(空結點)來儲存資訊。

普通二叉樹的結點儲存結構是:  左指標域  data域  右指標域

線索二叉樹的結點儲存結構是: 左標誌域  左指標域 data域 右指標域 右標誌域 

在剛開始,線索二叉樹是為了節省空間,用現有的結點來儲存資訊的,但lbit 域和rbit域是否會占用儲存空間,這個時候,我們需要明白的是,在左右標誌域都為邏輯上的字段,非常省空間,只需要乙個位就可以了。

對於標誌域的要求如下:

lbit=0,lchild 是通常的指標

lbit=1,lchild是線索

rbit=0,rchild是通常的指標

rbit=1,rchild是線索

那麼,我們如何將二叉樹轉換為線索二叉樹呢?

這個問題比較複雜並且也是比較重要的一部分知識點。

所以,為了明了起見,用一道例題能夠更好的說明, 用一顆二叉樹,將其前序,中序,後序的線索樹畫出來。

因為軟體原因,無法很好地將其構造樹的過程表現出來,所以現在將他的過程文字表達出來。

首先,按照正常的流程,將二叉樹的前序,中序和後序表現出來,之後,我們可以很明了的看出來,在前序的遍歷當中,每乙個的前驅和後繼,記住,只需要看找出來的前序中,分別前去和後記,不用再去管原來在二叉樹上的關係。之後,再根據自己畫出來了前序,中序,後序中的前驅後繼關係在原來的二叉樹上表現出來就可以了。

資料結構與演算法基礎 模組五

嗯mm 現在到演算法階段了,比較多的 建議有時間自己在電腦上敲一下,加深理解。那麼,現在以問題來帶入 1 什麼是拓樸排序?注 aov網的拓撲序列不是唯一的,滿足上述定義的任一線性序列都稱作它的拓撲序列。2 拓樸排序的實現步驟 在有向圖中選乙個沒有前驅的頂點並且輸出 從圖中刪除該頂點和所有以它為尾的弧...

資料結構與演算法基礎

電腦科學的研究物件是問題 解決問題的過程,以及通過該過程得到解決方案。演算法是具有有限步驟的過程,依照這個過程能解決問題。因此,演算法就是解決方案。電腦科學是研究問題及其解決方案,以及研究目前無解的問題的科學。可以簡答的認為電腦科學就是研究演算法的科學。抽象資料元素 沒有實際含義的資料元素,例如 a...

資料結構與演算法基礎

一 資料結構概述 資料結構的主要任務是通過分析資料物件的結構特徵,包括邏輯結構及資料物件之間的關係,然後把邏輯結構表示成計算機課實現的物理結構,從而便於計算機處理。概念術語 二 資料的邏輯結構與物理結構 邏輯結構 logical structure 是指在資料物件中資料元素之間的相互關係。資料元素之...