1.儲存結構(二叉鍊錶)
#include #include typedef struct bitnode
bitnode, *bitree;
2.二叉排序樹查詢演算法
//遞迴查詢二叉排序樹t中是否存在key
status search(bitree &t, int key, bitree f, bitree &p)//p指向資料元素的結點
//f指向其雙親結點,其初始呼叫值為null
else if(key==t->data)//若查詢成功,則指標p指向該資料元素結點,並返回true
else if(key < t->data)//若key小於t的根節點的資料域之值,則搜尋左子樹
return search(t->lchild, key, t, p);
else
return search(t->rchild, key, t, p);//搜尋右子樹
}
3.二叉排序樹的插入演算法
(1). 在查詢的基礎上
// 當二叉排序樹t中不存在關鍵字等於key的資料元素時插入key
status insert(bitree &t, int key)
else
return 0; //樹中已有關鍵字相同的結點,不再插入
}
(2).
status insert(bitree &t, int key)
else
}
4. 二叉排序樹的刪除演算法
二叉排序樹的刪除可分三種情況討論:
(1)被刪除的結點是葉子, 由於刪去葉子結點不破壞整棵樹的結構,只需修改其雙親結點的指標即可。
(2)被刪除的結點只有左子樹或者只有右子樹,此時只需要將被刪除結點的左子樹或者右子樹改為其雙親結點的左子樹或者右子樹即可。
(3)被刪除的結點既有左子樹,也有右子樹,以其前驅替代該結點,再刪除該前驅結點。
ps:尋找前驅結點的方法——找到當前結點的左孩子,一直向右遍歷,即得當前結點的前驅結點。
//若二叉排序樹t中存在關鍵字等於key的資料元素時,則刪除該資料元素結點
status delsearch(bitree &t, int key)
}status delete(bitree &t)//此時t代表被刪結點
else if(t->lchild == null)//左子樹空則只需重接待刪結點的右子樹(待刪結點是葉子也走此分支)
else//左右子樹均不空
t->data = s->data;//用被刪結點前驅的值取代被刪結點的值
if(q!=t)
q->rchild = s->lchild; // 重接q的右子樹
else
q->lchild = s->lchild; // 重接q的左子樹
free(s);
}return 1;
}
二叉排序樹基本操作
二叉排序樹,顧名思義,是一種排列好順序的二叉樹。它的排序規則是 每個結點的左子樹上的值都比它本身的值小,右子樹上的值都比它本身的值大。include include define true 1 define false 0 typedef struct binode binode,bitree in...
二叉排序樹基本操作
題目描述 編寫一棵二叉排序樹,來支援以下 6 種操作 插入 x 數 刪除 x 數 若有多個相同的數,因只刪除乙個 如果 x 不存在則不需要刪除 查詢 x 數的排名 排名定義為比當前數小的數的個數 1 如果 x 不存在則輸出 1 查詢排名為 x 的數 如果 x 大於樹中元素個數,則輸出 1 求 x 的...
二叉排序樹的基本操作
二叉排序樹 其中有插入 刪除 查詢操作 include include define false 0 define ture 1 define maxsize 10 typedef struct bitnode bitnode,bitree 查詢 f指向t的雙親,初始時為null 這裡用f,p,是問...