二叉搜尋樹的查詢(指定 最大 最小) 插入 刪除

2021-09-26 15:23:56 字數 1271 閱讀 7041

二叉搜尋樹有以下性質:

1.非空左子樹的所有鍵值小於其根節點的鍵值

2.非空右子樹的所有鍵值大於其根節點的鍵值

3.左、右子樹都是二叉搜尋樹

【find查詢指定元素】

①查詢根節點,若為空,返回null

②非空,則節點值與查詢值比較

1°x > 根值,右子樹中找

2°x < 根值, 左子樹中找

3° x == 根值,返回指向此節點的指標

//遞迴

position find(elementtype x, bintree bst)

//非遞迴

position find(elementtype x, bintree bst)

return null;

}

【返回最大、最小元素】

①最大元素一定在樹的最右分支的端節點上

②最小元素一定在樹的最左分支的端節點上

//最小非遞迴

position findmin(bin tree bst)

//最小遞迴

position findmin(bintree bst)

//最大就把上面的left改為right即可

【插入】

跟find類似

//非遞迴

bintree insert(elementtype x, bintree bst)

bst = malloc(sizeof(struct treenode));

bst->data = x;

bst->left = bst->right = null;

return bst;

}//遞迴

bintree insert(elementtype x, bintree bst)else

return bst;

}

【刪除節點】

①刪除的是葉節點,直接刪除

②刪除的只有乙個子節點

③釋放空間,用離被刪節點最近的元素代替

1°左子樹的最右斷點(整個子樹的最大值)

或者2°右子樹的最左斷點(整個子樹的最小值)

bintree delete(elementtype x, bintree bst)else

} return bst;

}

Codeup二叉查詢樹 二叉搜尋樹

判斷兩序列是否為同一二叉搜尋樹序列 開始乙個數n,1 n 20 表示有n個需要判斷,n 0 的時候輸入結束。接下去一行是乙個序列,序列長度小於10,包含 0 9 的數字,沒有重複數字,根據這個序列可以構造出一顆二叉搜尋樹。接下去的n行有n個序列,每個序列格式跟第乙個序列一樣,請判斷這兩個序列是否能組...

最大搜尋二叉樹

本題考慮到用遞迴,即遞迴左子樹找到最大搜尋二叉樹的頭結點,遞迴右子樹找到最大搜尋二叉樹的頭結點,對於最大二叉搜尋子樹來說,我們要知道它的頭結點,最大的size 即搜尋二叉子樹的大小 搜尋二叉子樹的最小值,最大值。等於說我們在處理子問題時必須知道這四個引數。我們函式僅返回頭結點,其餘三個引數用全域性陣...

二叉排序樹 二叉搜尋樹 二叉查詢樹

特點 結構體定義struct node 建樹 建二叉排序樹 void create node root,int t else if t root data create root lc,t else create root rc,t 前序遍歷 層序 字典序 int flag int pre 1001...