写的二叉树的建立与先序遍历,应该很简单的程序为什么输出的时候总是随机数呢?请帮帮忙

#include<iostream>#include<cstdlib>usingnamespacestd;#defineOK1#defineERROR0#defineOV... #include<iostream>
#include<cstdlib>
using namespace std;

#define OK 1
#define ERROR 0
#define OVERFLOW -2

typedef int Status;
typedef int TElemType;
typedef struct BiTNode
{
TElemType data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;

Status CreateBiTree(BiTree &T);
Status PrOrderTraverse(BiTree T);

int main()
{
BiTree T1;
cout<<"输入要创建的二叉树的存储结构"<<endl;
if(CreateBiTree(T1)) cout<<"二叉树创建成功"<<endl;
PrOrderTraverse(T1);
return 0;
}

Status CreateBiTree(BiTree &T)
{
char ch;
if((ch=getchar())!='\n')
{
if(ch==' ') T=NULL;
else
{
if(!(T=(BiTNode *)malloc(sizeof(BiTNode)))) exit(OVERFLOW);
T->data=ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
}
return OK;
}//创建一个树

Status PrOrderTraverse(BiTree T)
{
if(T!=NULL)
{
cout<<T->data;
PrOrderTraverse(T->lchild);
PrOrderTraverse(T->rchild);
}
return OK;
}//先序遍历二叉树

我刚刚注册的,还没有什么分,请帮帮我
展开
 我来答
243949427
2011-06-05 · TA获得超过175个赞
知道答主
回答量:43
采纳率:0%
帮助的人:40.7万
展开全部
没初始化呀

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<math.h>
typedef struct BiTNode
{
int data;
BiTNode *lchild,*rchild; // 左右孩子指针
}BiTNode,*BiTree;
void visit(int e)
{
printf("->%d",e);
}
void InitBiTree(BiTree &T)// 操作结果:构造空二叉肆旁橡树T
{
T=NULL;
}
void CreateBiTree(BiTree &T)
//按先序启睁次序输入二叉树中结点的值,构造二叉链表表示的二叉树T。变量Nil表示空(子)树。
{
int number;
scanf("%d",&number); // 输入结点的值
if(number==0) // 结点的值为空
T=NULL;
else
{
T=(BiTree)malloc(sizeof(BiTNode)); // 生成根结点
if(!T)
exit(OVERFLOW);
T->data=number; // 将值赋给T所指结点
CreateBiTree(T->lchild); // 递归构造左子树
CreateBiTree(T->rchild); // 递归构造右子树
}
}

void PreOrderTraverse(BiTree T,void(*Visit)(int))
//二叉树T存在,Visit是对结点操作的应用函数,先序递归遍历T,对每个结点调用函数Visit一次且仅一次
{
if(T) //T不为空时遍历
{
Visit(T->data); // 先访问根结点
PreOrderTraverse(T->lchild,Visit); // 再先序遍历左子树
PreOrderTraverse(T->rchild,Visit); // 最后先序遍历右子树
}
}

void main()
{

BiTree T;
InitBiTree(T); // 初始化二叉树T
printf("按先序次序输入二叉树中结点的值,输入0表示节点为空,如:(裂旁1 2 3 0 0 4 5 0 6 0 0 7 0 0 0)\n");
printf("\n请按先序次序输入二叉树中结点的值:");
CreateBiTree(T); // 建立二叉树T
printf("先序递归遍历二叉树: ");
PreOrderTraverse(T,visit); // 先序递归遍历二叉树T
printf("\n");
}
追问
按照您给的方法又加了一个初始化的函数,然而还是不对,得到的仍然是随机数,用C++语言编写的,老师不让用visit函数,所以用了递归的办法输出,您帮忙看看是不是遍历的时候输出错了
追答
#include  
#include
#include
#include

#define OK 1
#define ERROR 0

//***********************************************************

typedef struct BiTNode{
//二叉树二叉链表存储结构
char data;
struct BiTNode *lChild,*rChild;
}BiTNode,*BiTree;
//***********************************************************
int CreateBiTree(BiTree &T){
//按先序次序输入二叉中树结点的值,空格表示空树
//构造二叉链表表示的二叉树T
char ch;

scanf("%c",&ch);

if(ch=='0')T=NULL;
else{
if(!(T=(BiTNode *)malloc(sizeof(BiTNode))))
return(OVERFLOW);
T->data=ch;
CreateBiTree(T->lChild);
CreateBiTree(T->rChild);
}
return(OK);
}

int BiTreeCount (BiTree T){
//采用二叉链表存储结构,计算二叉树节点个数
int node;

if (T)
{
int lchild=BiTreeCount(T->lChild);
int rchild=BiTreeCount(T->rChild);
node =lchild+rchild+1;
}
else
node=0;

return node;
}
//***********************************************************
void PreOrderTraverse(BiTree T){
//采用二叉链表存储结构,先序遍历二叉树的递归算法
if(T){
printf("%c",T->data);
PreOrderTraverse(T->lChild);
PreOrderTraverse(T->rChild);
}
}

//***********************************************************
void main(){
//主函数分别实现建立并输出先、中、后序遍历二叉树
BiTNode *Tree;
printf("请按先序输入字符,如1200300:");
CreateBiTree(Tree);
printf("\n先序遍历二叉树:");
PreOrderTraverse(Tree);
printf("\n该二叉树的节点个数:%d\n",BiTreeCount(Tree));
}
匿名用户
2011-06-07
展开全部
五更分两年年年称心 一夜连两岁岁岁如意 横批:恭贺新春
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2011-06-05
展开全部
随机数产生用srand 和rand 来做 文件写入可以用ifstream
2 3
下面岁稿是二叉树建物雀昌立和遍历 (只完成前序)
//下面是头罩扒文件 BiTree.h
#include iostream
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2011-06-06
展开全部
一年四季行好运 八方财宝进家门 横批:家和万事兴
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式