主题:[讨论]有精通数据结构的吗??菜鸟请教啊!在线等了好久
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
typedef struct bitnode
{
char data;
int ltag,rtag;
struct bitnode *lchild,*rchild;
}bitnode;
bitnode *creat_tree(bitnode *root)
{
char ch;
scanf("%d",&ch);
if(ch==' ') root=NULL;
else
{
root=(bitnode *)malloc(sizeof(bitnode));
root->data=ch;
creat_tree(root->lchild);//为什么要写成root->lchild=creat_tree(root->lchild)??不这样写就错了
creat_tree(root->rchild);//同问
}
return(root);
}
已经建立了二叉树,下面将二叉树线索化,p是树的根结点,最后返回p,和头结点相连
bitnode *inthreading(bitnode *p)
{
if(p)
{
inthreading(p->lchild);//这样写运行时居然没有错?(没有写p->lchild=inthreading(p->lchild))
if(!p->lchild)
{
p->ltag=thread;
p->lchild=pre;
}
if(!pre->rchild)
{
pre->rtag=thread;
pre->rchild=p;
}
pre=p;
inthreading(p->rchild);
}
return p;
}
问题在程序中,主要不明白是如何递归的。
#include<stdlib.h>
#include<malloc.h>
typedef struct bitnode
{
char data;
int ltag,rtag;
struct bitnode *lchild,*rchild;
}bitnode;
bitnode *creat_tree(bitnode *root)
{
char ch;
scanf("%d",&ch);
if(ch==' ') root=NULL;
else
{
root=(bitnode *)malloc(sizeof(bitnode));
root->data=ch;
creat_tree(root->lchild);//为什么要写成root->lchild=creat_tree(root->lchild)??不这样写就错了
creat_tree(root->rchild);//同问
}
return(root);
}
已经建立了二叉树,下面将二叉树线索化,p是树的根结点,最后返回p,和头结点相连
bitnode *inthreading(bitnode *p)
{
if(p)
{
inthreading(p->lchild);//这样写运行时居然没有错?(没有写p->lchild=inthreading(p->lchild))
if(!p->lchild)
{
p->ltag=thread;
p->lchild=pre;
}
if(!pre->rchild)
{
pre->rtag=thread;
pre->rchild=p;
}
pre=p;
inthreading(p->rchild);
}
return p;
}
问题在程序中,主要不明白是如何递归的。