二叉搜尋樹有以下性質:
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...