2 sinat 24091517 sinat_24091517 于 2016.05.03 19:57 提问

这个二叉表的生成和遍历对吗。 1C

#include
#include
typedef int ElemType;
typedef int Status;
typedef struct Snode
{
ElemType data; /*数据域*/
struct Snode next; /指针域*/
}Snode,*LinkStack;
/*二叉树的二叉链表储存*/
typedef struct BiTNode{
ElemType data;
struct BiTNode *lchild,*rchild;
}BiTNode ,*BiTree;

Status CreateBiTree(BiTNode *T)
{
int ch;
scanf("%d",&ch);
if(ch==' ') T=NULL;
else{
if(!(T=(BiTNode *)malloc(sizeof(BiTNode))))exit(0);
T->data=ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
return 1;
}

void Init_StackL(LinkStack S)
{
*S=NULL;
}
Status Push_L(LinkStack *S,ElemType x) /
将元素x插入到栈顶位置*/
{
LinkStack p;
p=(LinkStack)malloc(sizeof(Snode)); /*新节点生成*/
p->data=x; /*向新节点赋值*/
p->next=*S; /*向栈顶插入新结点*/
S=p;
return 1;
}
Status Pop_L(LinkStack *S,ElemType *temp_) /
删除链栈的顶元素*/
{
LinkStack p;
ElemType temp;
if(*S==NULL) return 0; /*对于空栈则退出*/
temp=(*S)->data; /*暂存栈顶元素值,以便返回*/
p=*S; /*使栈顶指向下一结点*/
S=p->next;
free(p); /
释放栈顶元素*/
temp_=temp;
return 1;
}
Status StackEmpty(LinkStack *S) /
链栈的顶元素*/
{
LinkStack p;
if(*S==NULL) return 0; /*对于空栈则退出*/
else
return 1;
}
Status InOrderTraverse(BiTree T)
LinkStack S;
Init_StackL(&S);
BiTree p;
p=T;
while(p||StackEmpty(S)){
if(p){Push_L(&S,p);p=p->lchild;}
else{
Pop_L(&S,p);
p=p->rchild;
}
}
return 1;
}

2个回答

SchopenhauerZhang
SchopenhauerZhang   2016.05.03 20:21
    不对,个人认为不对,*S=NULL;,指向指针的指针为NULL?![图片说明](http://img.ask.csdn.net/upload/201605/03/1462278082_360136.png)
SchopenhauerZhang
SchopenhauerZhang   2016.05.03 20:22

我好像图片没有上传成功,您自己好好看看吧,*S=NULL;这坑定不对。S就是指针类型的变量,*S是指向指针的指针。

sinat_24091517
sinat_24091517 栈这里应该没错 栈的部分原来测试过。这是原来测试写的http://my.oschina.net/wang520/blog/648209
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!