二叉查詢樹 詳解

2022-05-27 00:45:08 字數 1193 閱讀 7980

二叉查詢樹又稱二叉搜尋樹,是一種效率極高的資料結構。

二叉查詢樹的定義是:

對於一棵二叉查詢樹上的乙個節點,他的左子樹上的任何乙個值都比它小,右子樹上的任何乙個值都比它大(不考慮相等的情況)。他的左右子樹又是一棵二叉查詢樹。

比如下圖就是乙個二叉查詢樹:

主要功能有:

插入,查詢和刪除。

我們還需要定義乙個結構體:

1

struct node //

建構函式

5 }; //

分號

由二叉查詢樹的性質可以顯而易見地知道,insert和find的效率約等於二叉樹的深度,效率在o(log2n)~o(n)之間。而delete_node的效率為o(1)。

本文只實現上面兩個,第三個自己寫。

由二叉查詢樹的性質可以顯而易見地知道,insert只需要向下摸索就能找到他應該存放的位置,下面是**:

1

int insert(int x,node *now)elseelse //

花括號

18 }elseelse //

花括號

30 } //

花括號

31 } //

花括號

32 } //

花括號

刪除就比較麻煩了,要分類討論

如果刪除的節點沒有孩子的話,就直接刪掉就是了。

如果有乙個孩子,那就將父親的孩子變為自己的孩子。

如果有兩個,就找最接近自己的乙個(可以通過中序遍歷找,也可以用特殊方法)

下面是**:

1

int delete_node(int x)

9if(now->data!=x)else

else

else42}

43}44 }

查詢自己完成。

二叉樹 二叉查詢樹

構建二叉樹,判斷是否為二叉查詢樹,遞迴先序遍歷,非遞迴中序遍歷 include include include include using namespace std 二叉樹結點 struct treenode 鍊錶結點 struct listnode struct tempnodetempnode...

二叉樹 二叉查詢樹

二叉樹 binary tree 一種樹型結構,每個節點最多擁有兩個節點。如下圖 幾種型別的二叉樹 1.full binary tree 每個節點的孩子數 是 0 或者 2.對高度沒有要求。如下圖 2.perfect binary tree 這個就是最完美的樹,顧名思義,所有葉子節點都有相同的深度,並...

二叉排序(查詢,搜尋)樹詳解

二叉排序樹或者是一棵空樹,或者是具有下列性質的二叉樹 1 若左子樹不空,則左子樹上所有結點的值均小於或等於它的根結點的值 2 若右子樹不空,則右子樹上所有結點的值均大於或等於它的根結點的值 3 左 右子樹也分別為二叉排序樹 一,儲存方式 按二叉樹的儲存方式,定義乙個結構體,包含節點的值,指向左右子樹...