二叉排序樹查詢,插入,刪除
點選(此處)摺疊或開啟
-
typedef struct BiTNode
-
{
-
int data;
-
struct BiTNode *lchild, *rchild;
-
}BiTNode, *BiTree;
-
-
//遞迴查詢二叉排序樹T中是否存在key
-
//指標f指向T的雙親,其初始化呼叫值為NULL
-
//若查詢成功,則指標p指向該資料元素節點,並返回TURE
-
//否則指標p指向查詢路徑上訪問的最後一個節點並返回FALSE
-
bool SearchBST(BiTree T, int key, BiTree f, BiTree *p)
-
{
-
if(!T)
-
{
-
*p=f;
-
return FALSE;
-
}
-
else if(key==T->data)
-
{
-
*p=T;
-
return TRUE;
-
}
-
else if(key<T->data)
-
{
-
return SearchBST(T->lchild, key, T, p);
-
}
-
else
-
{
-
return SearchBST(T->rchild, key, T, p);
-
}
-
}
-
-
//當二叉樹排序樹T中不存在關鍵字等於key的資料元素時
-
//插入key並返回TRUE, 否則返回FALSE
-
-
bool InsertBST(BiTree *T, int key)
-
{
-
BiTree p,s;
-
if(!SearchBST(*T, key, NULL, &p))
-
{
-
s=(BiTree)malloc(sizeof(BiTNode));
-
s->data=key;
-
s->lchild=s->rchild=NULL;
-
if(!p)
-
{
-
*T=s;
-
}
-
else if(key<p->data)
-
{
-
p->lchild=s;
-
}
-
else
-
{
-
p->rchild=s;
-
}
-
return true;
-
}
-
else
-
{
-
return false;
-
}
-
}
-
-
-
bool Delete(BiTree *p)
-
{
-
BiTree q,s;
-
if( (*p)->rchild==NULL )
-
{
-
q=*p; *p=(*p)->lchild; free(q);
-
}
-
else if( (*p)->lchild==NULL )
-
{
-
q=*p; *p=(*p)->rchild; free(q);
-
}
-
else
-
{
-
q=*p; s=(*p)->lchild;
-
while(s->rchild)
-
{
-
q=s; s=s->rchild;
-
}
-
(*p)->data=s->data;
-
if(q!=*p)
-
q->rchild=s->lchild;
-
else
-
q->lchild=s->rchild;
-
}
-
return true;
-
}
-
-
-
bool DeleteBST(BiTree *T, int key)
-
{
-
if(!*T)
-
{
-
return false;
-
}
-
else
-
{
-
if(key==(*T)->data)
-
{
-
return Delete(T);
-
}
-
else if (key<(*T)->data)
-
{
-
return DeleteBST(&(*T)->lchild, key);
-
}
-
else
-
{
-
return DeleteBST(&(*T)->rchild, key);
-
}
-
}
- }
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29012686/viewspace-1140292/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 二叉查詢樹的插入刪除查詢
- 二叉查詢樹(查詢、插入、刪除)——C語言C語言
- AVL樹(查詢、插入、刪除)——C語言C語言
- 二叉查詢樹(二叉排序樹)排序
- 資料結構 排序二叉樹(BST) 插入刪除查詢 中序遍歷 銷燬(後序遍歷)資料結構排序二叉樹
- Java-二叉排序樹的刪除Java排序
- 二叉查詢樹【二叉排序樹】構建和查詢演算法 PHP 版排序演算法PHP
- 二叉樹排序樹的建立,遍歷和刪除二叉樹排序
- 【資料結構】——搜尋二叉樹的插入,查詢和刪除(遞迴&非遞迴)資料結構二叉樹遞迴
- 查詢|有序表折半查詢判定樹|二叉排序樹|3階B-樹排序
- Java實現二叉搜尋樹的插入、刪除Java
- 五大經典查詢(1)_二叉排序樹查詢排序
- #查詢演算法#【2】二叉排序樹演算法排序
- 智慧指標和二叉樹(3):圖解查詢和刪除指標二叉樹圖解
- 實現二叉搜尋樹的新增,查詢和刪除(JAVA)Java
- 二叉樹的建立,插入,查詢,清空和比較二叉樹
- 二叉樹 & 二叉查詢樹二叉樹
- 簡單查詢、插入、更新、刪除SQL語句SQL
- GIS資料的查詢,插入,刪除,更新(ArcEngine)
- 查詢與排序04,插入排序排序
- 查詢二叉樹二叉樹
- 二叉查詢樹
- 雙向連結串列————查詢、刪除、插入結點
- 手擼二叉樹——二叉查詢樹二叉樹
- [轉]C++ STL list的初始化、新增、遍歷、插入、刪除、查詢、排序、釋放C++排序
- .NET 資料庫大資料 方案(插入、更新、刪除、查詢 、插入或更新)資料庫大資料
- mysql刪除查詢MySql
- 平衡二叉查詢樹:紅黑樹
- 二叉查詢樹和笛卡爾樹
- 二叉樹路徑查詢二叉樹
- 連結串列基本操作(建立,插入,查詢,刪除)-C語言C語言
- 單向迴圈連結串列——查詢、刪除、插入結點
- 雙向迴圈連結串列:(建立、插入、遍歷、求長、查詢、刪除、排序、銷燬)待測排序
- 第三章:查詢與排序(下)----------- 3.15基礎學習_樹、二叉樹、堆排序排序二叉樹
- Python 樹表查詢_千樹萬樹梨花開,忽如一夜春風來(二叉排序樹、平衡二叉樹)Python排序二叉樹
- 關於二叉樹的前序遍歷、中序遍歷、刪除元素、插入元素二叉樹
- Amazing tree —— 二叉查詢樹
- 二叉查詢樹的個數