我总是弄不明白
比如说二茶树建立。。。
我能看懂那些程序 可是要是让我自己写的话
却总是出现错误
找不到方法啊
BTNode* FindNode(BTNode *b,ElemType x)//找到值为x的节点并返回
{
if(!b)//如果b不存在
{
return NULL; //返回未找到,并且跳出函数
}
else //否则(b存在的情况)
{
if(b->data==x) //如果找到了
{
return b; //返回b的地址,并且跳出函数
}
else //否则(继续查找)
{
FindNode(b->lchild,x);//用函数FindNode()遍历b的左子树(用同样方法,这句就是递归了)
FindNode(b->rchild,x);//用函数FindNode()遍历b的右子树 这句也是递归
}
}
}
一般情况下,在函数f()中调用它本身的话,函数f()就是个递归函数.注意递归函数一定要有跳出函数的条件,否则就成了死循环了.
SunShining写的程序中的一段,建立二叉树的递归函数,借来用用
struct btnode *creatbt(struct btnode *bt,int k) //以bt为双亲建立子树
{
struct btnode *p,*t;
int x;
scanf("%d",&x);//x=0的时候结点不存在
if(x!=0) //如果结点存在
{
p=(struct btnode *)malloc(sizeof(struct btnode));
p->data=x;p->rflag=0;
p->lchild=p->rchild=NULL;
if(k==0) t=bt=p; //这个结点是根结点
if(k==1) bt->lchild=p; //这个结点p是结点bt的左子树
if(k==2) bt->rchild=p; //这个结点p是结点bt的右子树
creatbt(p,1); //以p为双亲建立p的左子树(调用自身,递归)
creatbt(p,2); //以p为双亲建立p的右子树(调用自身,递归)
}
return(t);//x=0时,结点不存在,返回t,跳出函数,结束递归的条件
}