5. 迴圈2、3、4,直到搜尋完或找到。二叉搜尋樹(binary search tree),也稱為「二叉查詢樹」,是指一顆空樹或者具有下列性質的二叉樹:
1. 任意節點的左子樹不空,則左子樹上所有節點的值「小於等於」它的跟節點的值。
2. 任意節點的右子樹不空,則右子樹上所有節點的值「大於等於」它的跟節點的值。
3. 任意節點的左子樹、右子樹也都為二叉查詢樹。
二叉查詢樹的特點:左子樹<=根節點<=右子樹!!!!
二叉查詢樹的優勢:其查詢、插入的時間複雜度較低,為o(log2n), 最壞為o(n)。
二叉查詢樹的應用場景:二叉查詢樹時基礎的線性資料結構,用於「構建更為抽象的資料結構,如集合、multiset、關聯陣列等」。
二叉搜尋樹實現:
1. 先構建一顆二叉搜尋樹,使樹符合二叉搜尋樹的性質(使用鍊錶實現)。本次講解的數列是「沒有相同元素的數列」!!!
2. 給定乙個搜尋值value,如果值等於根節點,則查詢到!!
3. 如果value 小於根節點,則比較根節點的左子樹。
4. 如果value 大於根節點,則比較根節點的右子樹。
實現**:
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 解釋 輸入為 ...