BiTree *Point(BiTree *T,TElemType s)
{ // 返回二叉树T中指向元素值为S的节点的指针
LinkQueue *q;
BiTree *a;
q = (LinkQueue *)malloc(sizeof(struct QNode));
a = (BiTree *)malloc(sizeof(struct BiTNode));
if(T)
{
InitQueue(&q);
EnQueue(q,T);
while(!QueueEmpty(q))
{
DeQueue(q,&a);
if(a->data==s)
return a;
if(a->lchild)
EnQueue(q,a->lchild);
if(a->rchild)
EnQueue(q,a->rchild);
}
}
free(q);
free(a);
return NULL;
}
TElemType LeftChild(BiTree *T,TElemType e)
{//返回e的左孩子,若e无左孩子,则返回空
BiTree *a;
if(T)
{
a = Point(T,e);
if(a && a->lchild)
return a->lchild->data;
}
return Nil;
}
TElemType RightChild(BiTree *T,TElemType e)
{//返回e的右孩子,若e无左孩子,则返回空
BiTree *a;
if(T)
{
a = Point(T,e);
if(a && a->rchild)
return a->rchild->data;
}
return Nil;
}
TElemType LeftSibling(BiTree *T,TElemType e)
{//返回e的左兄弟,若e是T的左孩子或无左孩子,则返回空
TElemType a;
BiTree *p;
if(T)
{
a = Parent(T,e);
p= Point(T,a);
if(p->lchild && p->rchild && p->rchild->data ==e)
return p->lchild->data;
}
return Nil;
}
TElemType RightSibling(BiTree *T,TElemType e)
{//返回e的右兄弟,若e是T的左孩子或无左孩子,则返回空
TElemType a;
BiTree *p;
if(T)
{
a= Parent(T,e);
p = Point(T,a);
if(p->lchild && p->rchild && p->lchild->data ==e)
return p->rchild->data;
}
return Nil;
}
Status InsertChild(BiTree *p,int LR,BiTree *c)
{// 根据LR为0或1,插入c为T中p所指节点的左或右孩子,p所指节点的原有左或右子树,则成为c的右子树
if(p)
{
if(LR == 0)
{
c->rchild = p->lchild;
p->lchild = c;
}
else
{
c->rchild = p->rchild;
p->rchild =c;
}
return OK;
}
return ERROR;
}
Status DeleteChild(BiTree *p,int LR)
{//根据LR为0或1,删除T中p所指向的左或右子树
if(p)
{
if(LR == 0)
ClearBiTree(&(p->lchild));
else
ClearBiTree(&(p->rchild));
return OK;
}
return ERROR;
}
|