資料結構 二叉排序樹

2021-08-29 18:15:35 字數 2619 閱讀 2316

二叉排序樹或者是一棵空樹,或者是具有下列性質的二叉樹:

(1)若左子樹不空,則左子樹上所有結點的值均小於或等於它的根結點的值;

(2)若右子樹不空,則右子樹上所有結點的值均大於或等於它的根結點的值;

(3)左、右子樹也分別為二叉排序樹;

根據二叉樹的定義,左子樹節點值《根節點值《右子樹節點值。所以對二叉排序樹進行中序遍歷,可以得到乙個遞增的有序序列。

如圖,中序遍歷的結果為:123468

二叉排序樹或者是一棵空樹,或者是具有下列性質的二叉樹:

(1)若左子樹不空,則左子樹上所有結點的值均小於或等於它的根結點的值;

(2)若右子樹不空,則右子樹上所有結點的值均大於或等於它的根結點的值;

(3)左、右子樹也分別為二叉排序樹;

根據二叉樹的定義,左子樹節點值《根節點值《右子樹節點值。所以對二叉排序樹進行中序遍歷,可以得到乙個遞增的有序序列。

如圖,中序遍歷的結果為:123468

二叉排序樹的查詢:

二叉排序樹的查詢是從根節點開始,沿著某乙個分支逐層向下進行比較的過程。若二叉排序樹非空,將給定值與根節點的關鍵字比較,若相等,則查詢成功;

若不等,則當根節點的關鍵字大於給定關鍵字值時,在根節點的左子樹查詢,否則在跟幾點的右子樹中查詢。依次遞迴查詢。

如上圖,比如查詢值為4的節點,則先與根節點6比較,因為4小於6,所以在根節點的左子樹中繼續查詢,又因為4大於2,所以在節點2的右子樹中查詢,直至查詢成功。

二叉排序樹的插入:

插入節點的過程:若原二叉排序樹為空,則直接插入節點;否則,若關鍵字k小於根節點的關鍵字,則插入到

左子樹中,若關鍵字k大於根節點的關鍵字,則插入到右子樹中。

//

// created by administrator on 2018/6/7.

///**

* 二叉排序樹

*/#include "stdio.h"

#include "stdlib.h"

#include "string.h"

/** * 定義一棵二叉排序樹

*/#define elementtype char

typedef struct bitstnode, *bitstree;

/** * 先序遍歷建立一棵二叉樹排序樹

* @param tree

* @return

*/bitstree createtree(bitstree tree) else

return tree;

}/**

* 在二叉排序樹中插入乙個關鍵字為k的節點

* @param tree 二叉排序樹

* @param k 需要拆入的節點元素

* @return

*/bitstree insert(bitstree tree, elementtype k) else if (k == tree->data) else if (k > tree->data) else

return tree;

}/**

* 建立一棵二叉排序樹

* @param tree

* @param str

* @param n

*/bitstree createbsorttree(bitstree *tree, elementtype str, int n)

return tree;

}/**

* 二叉排序樹非遞迴查詢

* @param t 樹

* @param key 需要查詢的value

* @return

*/bitstree search(bitstree t, elementtype key) else

}return t;

}/**

* 二叉排序樹遞迴查詢

* @param t

* @param key

*/void recusearch(bitstree t, elementtype key)

if (key < t->data) else

} else

}int main() ;

int len = strlen(str);

tree = createbsorttree(tree, str, len);

// tree = createtree(tree);

char d = 'd';

char m = 'm';

printf("二叉排序樹非遞迴查詢:\n");

bitstree loctree = search(tree, 'd');

if (loctree) else

loctree = search(tree, 'm');

if (loctree) else

printf("二叉排序樹遞迴查詢:\n");

資料結構 二叉排序樹

二叉排序樹是一種特殊結構的二叉樹,它作為一種表的組織手段,通常被稱為 樹表。可以作為一種排序和檢索的手段。定義 二叉排序樹或是空樹,或是具有下述性質的二叉樹 其左子樹上所有結點的資料值均小於根結點的資料值 右子樹上所有結點的資料值均大於或等於根結點的資料值。左子樹和右子樹又各是一棵二叉排序樹。對二叉...

資料結構 二叉排序樹

二叉排序樹 binarysorttree 具有下列性質的二叉樹 1 若左子樹不空,則左子樹上所有結點的值均小於它的根結點的值 2 若右子樹不空,則右子樹上所有結點的值均大於它的根結點的值 3 左 右子樹也分別為二叉排序樹 include includeusing namespace std type...

資料結構 二叉排序樹

如果需要乙個滿足 支援排序性 高效插入 刪除操作 高效查詢的資料結構,怎麼做?先看看一些簡單的資料結構 1 排序順序表 陣列 查詢可以採用折半查詢演算法,時間效率為o log2n 插入 刪除操作的時間複雜度為o n 資料量大時,效率太低。2 排序單鏈表 只能採用順序查詢,時間複雜度為o n 不能採用...