數據結構與算法-學習筆記(4)-二叉排序樹的查找、插入

菜鳥一枚,
剛剛學習數據結構與算法,
爲了加深理解,
所以與同學們分享學習過程。

今天學習的是,
二叉排序樹的查找!!!

//二叉樹的查找
//二叉樹的二叉鏈表節點結構定義
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;  //樹中有相同關鍵字節點,不在插入
	}
}

若有錯誤的地方,請同學們指出。
謝謝同學們的閱讀!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章