二叉排序樹的刪除和查詢可以用遞迴實現,也可以用迴圈實現。
1.查詢
1.1查詢值
bool search(tnode * root,int value)
(!root) false;
while(root->data!=value)
.................
1.2 查詢中序遍歷的字首或者字尾
node * search_node(tnode * root,int value)
思路同上,每次比較之後選擇是->lchild,->rchild
2.刪除
思路,找到字首pre,刪除思路根據節點擁有的的子樹決定
2.1 分類
刪除葉子:例如葉子是字首的左子樹,則pre->lchild=null。
刪除只有左或右子樹的節點:將節點的非空子樹賦值給節點字首的相應子樹。這類刪除退化成單鏈表的刪除。
刪除有左和右子樹的節點:先取得要刪除的節點,可以再取左子樹的最大值,或右子樹的最小值,將值取代要刪除的值,然後將此節點刪除。
二叉排序樹的查詢刪除
include stdio.h include math.h 二叉排序樹 typedef struct bitnode 結點結構 bitnode,bitnree 遞迴查詢二叉排序樹t中是否存在key 指標f指向t的雙親,其初始呼叫值為null 如果查詢成功,指標p指向這個元素結點,返回ture,否則...
二叉排序樹的建立 查詢和刪除
二叉排序樹是一種動態樹表.二叉排序樹的定義 二叉排序樹或者是一顆空樹,或者是一顆具有如下性質的二叉樹 在二叉排序樹中插入新的節點,要保證插入後的二叉樹仍然符合二叉樹的定義.插入過程 若二叉排序樹為空,則待插入的節點 s作為根節點插入到空樹中 當非空時,將待插入點關鍵字k 和根節點bst key 若k...
二叉排序樹的查詢 插入和刪除
二叉排序樹 binary sort tree 又稱為二叉查詢樹,它或者是一棵空樹,或者是具有下列性質的二叉樹 若它的左子樹不為空,則左子樹上所有結點的值均小於它的根節點的值 若它的右子樹不為空,則右子樹上所有結點的值均大於它的根節點的值 它的左 右子樹也分別為二叉排序樹 遞迴 二叉排序樹用中序遍歷之...