二叉搜尋樹

2022-05-03 03:57:10 字數 1917 閱讀 4435

定義:二叉查詢樹(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 int

type;

typedef

struct

bstreenodenode, *bstree;

1.2 建立節點建立節點的**

static node* create_bstree_node(type key, node *parent, node *left, node*right)

2 遍歷2.1 前序遍歷

void

preorder_bstree(bstree tree)

}

2.2 中序遍歷

void

inorder_bstree(bstree tree)

}

2.3 後序遍歷

void

postorder_bstree(bstree tree)

}

3. 查詢遞迴版本的**:

node*bstree_search(bstree x, type key)

非遞迴版本的**:

node*iterative_bstree_search(bstree x, type key)

return

x;}

4. 最大值和最小值查詢最大值的**:

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 解釋 輸入為 ...