菜鳥一枚,
剛剛學習數據結構與算法,
爲了加深理解,
所以與同學們分享學習過程。
今天學習的是,
二叉排序樹的查找!!!
//二叉樹的查找
//二叉樹的二叉鏈表節點結構定義
typedef struct BiTNode
{
int data;
struct BiTNode *lchild, *rchild;
}BiTNode, *BiTree;
//遞歸查找二叉排序樹T中是否存在key
//key: 爲待查找的數據
//指針f:指針f指向T的雙親,初始調用值爲null
//若查找成功,指針p指向該數據節點,返回TURE
//否則,指針P指向查找路徑上訪問的最後一個節點
Status SearchBST(BiTree T,int key,BiTree f,BiTree *p)
{
if(!T) //若查找不成功
{
*p = f; //指針P指向查找路徑上訪問的最後一個節點,即f雙親節點
return FALSE;
}
else if(key == T->data) //查找成功
{
*p = T; //指針p指向該數據節點,返回TURE
return TURE;
}
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
Status 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; //插入s爲左孩子
}
else
{
p->rchild = s; //插入s爲右孩子
}
return TRUEL
}
else
{
return FALSE; //樹中有相同關鍵字節點,不在插入
}
}
若有錯誤的地方,請同學們指出。
謝謝同學們的閱讀!!!