为了账号安全,请及时绑定邮箱和手机立即绑定

关于括号表示发输出

关于括号表示发输出

慕沐4487107 2018-04-30 21:40:46
//编译链接没错误,就是输出有问题,急求!!! //代码在下面 #include"stdio.h"#include"stdlib.h"#define MAX 100typedef char datatype;struct node{datatype data;node *lchild,*rchild;};node *init()//初始化空二叉树{ return NULL;}//(2)二叉树的创建node *createbitree(node *root,datatype str[]){ node *a[MAX],*p; int top=0,i,k=0;//k=1表示左子树,k=2表示右子树,top表示栈顶+1 for(i=0;str[i]!='\0';) {  if(str[i]=='(')  {   k=1;   a[top]=p;   top++;  }  else if(str[i]==',')  {k=2;}  else if(str[i]==')')  {top--;}  else  {   p=(node *)malloc(sizeof(struct node));   p->data=str[i];   p->lchild=p->rchild=NULL;  }  if(root)  {    if(k==1)  {   a[top-1]->lchild=p;  }  else if(k==2)  {   a[top-1]->rchild=p;  }  }  else  {   root=p;  }  i++; } return root;}//(4)用括号表示法输出二叉树的所有节点void display(node *root){ node *p=root; if(p) {  printf("%c",p->data);//打印根结点  if(p->lchild||p->rchild)  {   printf("(");   if(p->lchild)   display(p->lchild);//打印左子树   printf(",");   if(p->rchild)   display(p->rchild);//打印右子树   printf(")");  } }void main(){ datatype str[MAX],x,l,r; node *root; int h; printf("请输入括号表示法的二叉树:"); gets(str); root=init();//初始化空二叉树 root=createbitree(root,str);//(2)二叉树的创建display(root);//(4)用括号表示法输出二叉树的所有节点}
查看完整描述

3 回答

?
慕沐4487107

TA贡献11条经验 获得超1个赞

#include"stdio.h"
#include"stdlib.h"
#define MAX 100
typedef char datatype;
struct node{
datatype data;
node *lchild,*rchild;};
node *init()//初始化空二叉
{ return NULL;}
//(2)二叉树的创建
node *createbitree(node *root,datatype str[])
{ node *a[MAX],*p;
int top=0,i,k=0;
//k=1表示左子树,k=2表示右子树,top表示栈顶+1
for(i=0;str[i]!='\0';)
{  if(str[i]=='(') 
{   k=1;   a[top]=p;   top++;  }
else if(str[i]==',')  {k=2;} 
else if(str[i]==')')  {top--;} 
else
  {   p=(node *)malloc(sizeof(struct node));  
  p->data=str[i];   p->lchild=p->rchild=NULL;
   } 
   if(root) 
   {    if(k==1)  {   a[top-1]->lchild=p;  }
     else if(k==2)  {   a[top-1]->rchild=p;  }  }  else  {   root=p;  }  i++; } return root;}
     //(4)用括号表示法输出二叉树的所有节点
void display(node *root)
{ node *p=root;
if(p)
{  printf("%c",p->data);
//打印根结点  
if(p->lchild||p->rchild) 
{   printf("(");   if(p->lchild)   display(p->lchild);//打印左子树  
printf(",");
   if(p->rchild)   display(p->rchild);//打印右子树    
   printf(")");  } }

查看完整回答
反对 回复 2018-05-01
  • 慕沐4487107
    慕沐4487107
    void main() { datatype str[MAX],x,l,r; node *root; int h; printf("请输入括号表示法的二叉树:"); gets(str); root=init(); //初始化空二叉树 root=createbitree(root,str); //(2)二叉树的创建 display(root); //(4)用括号表示法输出二叉树的所有节点 }
?
onemoo

TA贡献883条经验 获得超454个赞

提示下:发帖时的编辑器不会自动格式化代码,你需要使用格式化工具。

回帖的话,只有在主题下的回帖中可以格式化代码。回复别人的回帖时无法格式化。

再试着发一次格式化后的代码吧,你这样一堆代码很难看的...

查看完整回答
反对 回复 2018-04-30
?
慕沐4487107

TA贡献11条经验 获得超1个赞

#include"stdio.h"#include"stdlib.h"#define MAX 100typedef char datatype;struct node{datatype data;node *lchild,*rchild;};node *init()//初始化空二叉树{ return NULL;}//(2)二叉树的创建node *createbitree(node *root,datatype str[]){ node *a[MAX],*p; int top=0,i,k=0;//k=1表示左子树,k=2表示右子树,top表示栈顶+1 for(i=0;str[i]!='\0';) {  if(str[i]=='(')  {   k=1;   a[top]=p;   top++;  }  else if(str[i]==',')  {k=2;}  else if(str[i]==')')  {top--;}  else  {   p=(node *)malloc(sizeof(struct node));   p->data=str[i];   p->lchild=p->rchild=NULL;  }  if(root)  {    if(k==1)  {   a[top-1]->lchild=p;  }  else if(k==2)  {   a[top-1]->rchild=p;  }  }  else  {   root=p;  }  i++; } return root;}//(4)用括号表示法输出二叉树的所有节点void display(node *root){ node *p=root; if(p) {  printf("%c",p->data);//打印根结点  if(p->lchild||p->rchild)  {   printf("(");   if(p->lchild)   display(p->lchild);//打印左子树   printf(",");   if(p->rchild)   display(p->rchild);//打印右子树   printf(")");  } }void main(){ datatype str[MAX],x,l,r; node *root; int h; printf("请输入括号表示法的二叉

查看完整回答
反对 回复 2018-04-30
  • 3 回答
  • 0 关注
  • 2616 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信