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 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突