二叉排序樹及相關操作說明

2021-09-13 22:20:41 字數 865 閱讀 6087

在講到集合的時候,很容易讓人想到的是陣列和鍊錶。然後大家會討論這兩種資料結構的差異。但是根據指定的內容在集合中查詢,這兩種資料結構的效能卻沒有區別都是o(n),如何提高在集合中檢索指定內容資料的效能,是我們在程式開發中面臨的問題。

左子樹不空時,左子樹上所有的結點關鍵字的值均小於根結點關鍵字的值;

右子樹不空時,右子樹上所有的結點關鍵字的值均大於根結點關鍵字的值;

左右子樹同時有滿足性質1、性質2

將給定的值與根結點相比較,若相等則查詢成功;

若小於根結點到左子樹進行查詢,若大於根結點到右子樹進行查詢;

左右子樹依次進行步驟1、步驟2操作,直到找到相等的結點或找到null(查詢失敗)

二叉樹的查詢與折半查詢相似

例,根據來構建二叉排序樹

從乙個空樹出發來構建二叉排序樹,新增結點是建立在查詢二叉排序樹失敗的前提下,因此新增的結點一定是二叉排序樹的葉子結點

中序遍歷二叉排序樹即可得到乙個有序的集合

二叉排序樹的刪除規則:設,

*f為指向被刪除結點的雙親結點的指標

*p為指向被刪除結點的指標

若*p是葉子結點,那麼就直接刪除

若刪除的*p結點只有左子樹或是右子樹,刪除*p結點之後直接將子樹掛在*f結點上即可,成為*f結點的子樹

若刪除的*p結點同時擁有左、右子樹,刪除節點有兩種可行性操作:

接下來以*p結點的後繼結點進行討論:

上述是在*p是*f的孩子的前提下進行的討論,接下來是以*p是*f的孩子進行討論,直接上圖了

二叉排序樹相關操作(C C )

目錄 1 建立二叉樹 遞迴 2 建立二叉樹 非遞迴 3 前序遍歷 非遞迴 4 中序遍歷 非遞迴 5 後續遍歷 非遞迴 建立ordertree bitree t,int data void ordertree bitree t,int data else if data t data else if ...

二叉排序樹的相關操作

二叉排序樹 定義 1 若它的左子樹非空,則左子樹的所有節點都小於它的根節點 2 若它的右子樹非空,則右子樹的所有節點都小於它的根節點 3 它的左右字數也分別為二叉排序樹。二叉排序樹的建立和插入節點 實現 int bst insert treenode root,int data else if da...

二叉排序樹相關筆記

定義 二叉排序樹或者是一棵空樹 或者是具有如下特性的二叉樹 若它的左子樹不空,則左子樹上所有結點的值均小於根結點的值 若它的右子樹不空,則右子樹上所有結點的值均大於根結點的值 它的左 右子樹也都分別是二叉排序樹。二叉排序樹的定義是乙個遞迴定義的過程。保證小於根結點值的結點都落在左子樹上,而大於根結點...