二叉排序樹或者是一棵空樹,或者是具有下列性質的二叉樹:
(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 不能採用...