sinat_24091517 2016-05-03 11:57 采纳率: 36.4%
浏览 1346
已结题

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

#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 2016-05-03 12:21
    关注
        不对,个人认为不对,*S=NULL;,指向指针的指针为NULL?![图片说明](https://img-ask.csdn.net/upload/201605/03/1462278082_360136.png)
    
    评论

报告相同问题?

悬赏问题

  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置