永发信息网

数据结构二叉树的简单遍历问题 #include "stdio.h" #include "stdli

答案:3  悬赏:40  手机版
解决时间 2021-02-01 11:23
  • 提问者网友:活着好累
  • 2021-01-31 22:13
数据结构二叉树的简单遍历问题
#include "stdio.h"
#include "stdlib.h"
typedef char TElemType;
typedef struct xx{
TElemType data;
struct xx *lchild,*rchild;
}BiTNode,*BiTree;
void CreateBiTree(BiTNode *T)
{
char ch;
ch=getchar();
if(ch==' ')T=NULL;
else
{
T=(BiTNode *)malloc(sizeof(BiTNode));
if(!T)
{
printf("申请失败!\n");
exit(0);
}
T->data=ch;
CreateBiTree(&T->lchild);
CreateBiTree(&T->rchild);

}
}
void PreOrderTraverse(BiTNode *T)
{
if(T!=0)
{
printf("%c",T->data);
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
}

int main()
{

BiTNode *p;
printf("请按照二叉树的先序遍历输入值,空格代表为空:");
CreateBiTree(p);
PreOrderTraverse(p);

return 0;
}
上面是自己写的,运行有错。
下面是参考案例,可以运行。
#include "stdio.h"
#include "stdlib.h"
typedef char TElemType;
typedef struct xx{
TElemType data;
struct xx *lchild,*rchild;
}BiTNode,*BiTree;
void CreateBiTree(BiTree *T)
{
char ch;
ch=getchar();
if(ch==' ')*T=NULL;
else
{
*T=(BiTNode *)malloc(sizeof(BiTNode));
if(!(*T))
{
printf("申请失败!\n");
exit(0);
}
(*T)->data=ch;
CreateBiTree(&(*T)->lchild);
CreateBiTree(&(*T)->rchild);

}
}
void PreOrderTraverse(BiTNode *T)
{
if(T!=0)
{
printf("%c",T->data);
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
}

int main()
{

BiTNode *p;
printf("请按照二叉树的先序遍历输入值,空格代表为空:");
CreateBiTree(&p);
PreOrderTraverse(p);

return 0;
}
最佳答案
  • 五星知识达人网友:风格不统一
  • 2021-01-31 22:48
你传入的指针p,传入的不是p本身,是默认复制了一个副本,所以你main里面的p始终为空。
可以将函数参数改为 &* 指针引用。
或者像例程一样传入 &p
全部回答
  • 1楼网友:妄饮晩冬酒
  • 2021-02-01 00:24
//楼主你好,以下代码经验证运行通过无错。 #include<stdio.h> #include <malloc.h>  typedef char datatype; typedef struct BinTNode {    datatype data;  struct BinTNode *lchild,*rchild;  }BinTNode,*BinTree;  void CreateBinTree(BinTree*T)  { char ch;  scanf("\n%c",&ch);  getchar(); if(ch=='0') *T=NULL;  else { *T=(BinTree)malloc(sizeof(BinTNode));  (*T)->data=ch;         CreateBinTree(&(*T)->lchild);   CreateBinTree(&(*T)->rchild);  }   } void InOrderOut(BinTree T)   { if(T)      {  printf("%c",T->data); InOrderOut(T->lchild);   InOrderOut(T->rchild);      }  } int main()  {  BinTree bt;       printf("创建先序遍历序列二插树\n");      CreateBinTree(&bt);       printf("先序遍历的二叉树:"); InOrderOut(bt);  return 0;  }
  • 2楼网友:渊鱼
  • 2021-01-31 23:57
using namespace std;iostream.h> 是c++中比较通用的,但是98年标准化以后就不那样写了;是c语言中比较通用的;的写法,现在c++全部都是用上面列出的第二种写法; #include <。 c++原来也兼容#include
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯