部分值无法交换
函数:
void swap(bitree *p)
{
if(p!=NULL && p->lchild!=NULL && p->rchild!=NULL)
{
bitree *s;
if(p->lchild->data < p->rchild->data)
{
s = p->lchild;
p->lchild = p->rchild;
p->rchild = s;
}
swap(p->lchild);
swap(p->rchild);
}
}
嵌套的swap函数要放到if外,否则只要中间有一个节点缺少左或右子树,那么左或右子树的左右子树就不会进行交换了
void swap(bitree *p)
{
if(p!=NULL && p->lchild!=NULL && p->rchild!=NULL)
{
bitree *s;
if(p->lchild->data < p->rchild->data)
{
s = p->lchild;
p->lchild = p->rchild;
p->rchild = s;
}
}
swap(p->lchild);
swap(p->rchild);
}
void swap(bitree *p)
{
if(p!=NULL && p->lchild!=NULL )
{
bitree *s;
if(p->rchild!=NULL)
{
if(p->lchild->data < p->rchild->data)
{
s = p->lchild;
p->lchild = p->rchild;
p->rchild = s;
}
}
swap(p->lchild);
swap(p->rchild);
}
}
问题找到了,是判断语句出现逻辑错误,判断右孩子非空要放在大判断的里面