菜鸟一枚,
刚刚学习数据结构与算法,
为了加深理解,
所以与同学们分享学习过程。
今天学习的是,
二叉排序树的查找!!!
//二叉树的查找
//二叉树的二叉链表节点结构定义
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; //树中有相同关键字节点,不在插入
}
}
若有错误的地方,请同学们指出。
谢谢同学们的阅读!!!