定義:二叉查詢樹(binary search tree),又被稱為二叉搜尋樹。設x為二叉查詢樹中的乙個結點,x節點包含關鍵字key,節點x的key值記為key[x]。如果y是x的左子樹中的乙個結點,則key[y] <= key[x];如果y是x的右子樹的乙個結點,則key[y] >= key[x]。
在二叉查詢樹中:
(01) 若任意節點的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值;
(02) 任意節點的右子樹不空,則右子樹上所有結點的值均大於它的根結點的值;
(03) 任意節點的左、右子樹也分別為二叉查詢樹。
(04) 沒有鍵值相等的節點(no duplicate nodes)。
**如下:
1. 節點定義
1.1 節點定義
typedef int1.2 建立節點建立節點的**type;
typedef
struct
bstreenodenode, *bstree;
static node* create_bstree_node(type key, node *parent, node *left, node*right)2 遍歷2.1 前序遍歷
void2.2 中序遍歷preorder_bstree(bstree tree)
}
void2.3 後序遍歷inorder_bstree(bstree tree)
}
void3. 查詢遞迴版本的**:postorder_bstree(bstree tree)
}
node*bstree_search(bstree x, type key)非遞迴版本的**:
node*iterative_bstree_search(bstree x, type key)4. 最大值和最小值查詢最大值的**:return
x;}
node*bstree_maximum(bstree tree)查詢最小值的**
node*bstree_minimum(bstree tree)5. 前驅和後繼:什麼是後繼和前驅,如果對數的節點的關鍵字排序:
key1<=key2<=......<=keyn−3<=keyn−2<=keyn−1<=keynkey1<=key2<=......<=keyn−3<=keyn−2<=keyn−1<=keyn,那麼keyn−3keyn−3和keyn−1keyn−1就是keyn−2keyn−2的前驅和後繼;
查詢前驅節點的**:
node* bstree_predecessor(node *x)查詢後繼節點的**:return
y;}
node* bstree_successor(node *x)return
y;}
二叉搜尋樹 二叉搜尋樹
題目 二叉搜尋樹 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 解釋 輸入為 ...