二叉搜尋樹(Binary Search Tree)

2021-08-22 19:20:31 字數 1722 閱讀 4330

二叉搜尋樹(binary search tree),也稱為「二叉查詢樹」,是指一顆空樹或者具有下列性質的二叉樹:

1. 任意節點的左子樹不空,則左子樹上所有節點的值「小於等於」它的跟節點的值。

2. 任意節點的右子樹不空,則右子樹上所有節點的值「大於等於」它的跟節點的值。

3. 任意節點的左子樹、右子樹也都為二叉查詢樹。

二叉查詢樹的特點:左子樹<=根節點<=右子樹!!!!

二叉查詢樹的優勢:其查詢、插入的時間複雜度較低,為o(log2n), 最壞為o(n)。

二叉查詢樹的應用場景:二叉查詢樹時基礎的線性資料結構,用於「構建更為抽象的資料結構,如集合、multiset、關聯陣列等」。

二叉搜尋樹實現:

1. 先構建一顆二叉搜尋樹,使樹符合二叉搜尋樹的性質(使用鍊錶實現)。本次講解的數列是「沒有相同元素的數列」!!!

2. 給定乙個搜尋值value,如果值等於根節點,則查詢到!!

3. 如果value 小於根節點,則比較根節點的左子樹。

4. 如果value 大於根節點,則比較根節點的右子樹。

5. 迴圈2、3、4,直到搜尋完或找到。

實現**:

struct tree

;/*

desc: 二叉查詢樹增加元素

param: proottree 跟節點

param:value 需要增加的元素的值

*/ void addelementtobst(tree* proottree, int value)

if (proottree->value > value)

else

}else

else

}

/*

desc: 建立二叉查詢樹

param: vtree 樹節點的集合

param: array 查詢陣列

param: size 陣列長度

reutrn: 二叉查詢樹的跟節點

*/ tree* createbinarysearchtree(int array, int size)

tree* proottree = null;

for (int i=0; ivalue = array[i];

proottree->pleft = null;

proottree->pright = null;

}else

addelementtobst(proottree, array[i]);

}return proottree;

/*

desc: 二叉查詢樹查詢

param: array 查詢陣列

param: size 陣列長度

param:searchvalue 查詢的值

return:如果沒找到,返回-1

*/ int bst(int array, int size, int searchvalue)

else if (pbst->value < searchvalue)

else }

//沒有釋放記憶體!!!!

return -1;

結果:

二叉搜尋樹 二叉搜尋樹

題目 二叉搜尋樹 time limit 2000 1000 ms j a others memory limit 32768 32768 k j a others total submission s 6945 accepted submission s 3077 problem descripti...

二叉搜尋樹 修剪二叉搜尋樹

第一反應是重構,看來別人的解答發現,其實不用重構那麼複雜。treenode trimbst treenode root,int low,int high if root val high 下一層處理完左子樹的結果賦給root left,處理完右子樹的結果賦給root right。root left ...

樹 二叉樹 二叉搜尋樹

給定乙個二叉樹,判斷其是否是乙個有效的二叉搜尋樹。假設乙個二叉搜尋樹具有如下特徵 節點的左子樹只包含小於當前節點的數。節點的右子樹只包含大於當前節點的數。所有左子樹和右子樹自身必須也是二叉搜尋樹。示例 1 輸入 2 13輸出 true 示例 2 輸入 5 14 3 6輸出 false 解釋 輸入為 ...