二叉树的创建

来源:百度知道 编辑:UC知道 时间:2024/06/01 16:33:49
实现二叉树的创建及三种遍历方式,帮我看看哪里出错了
#include<stdio.h>
#include<alloc.h>
#define BiTNode struct BiTNode
BiTNode
{
int data;
BiTNode *lchild,*rchild;
};
void CreateBiTree(BiTNode *T)
{
int m;
scanf("%d",&m);
if(m==0) T=NULL;
else{
T=(BiTNode*)malloc(sizeof(BiTNode));
T->data=m;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
}
void preorder(BiTNode *bt)
{
if(bt==NULL) return;
printf("%d ",bt->data);
preorder(bt->lchild);
preorder(bt->rchild);
}
void inorder(BiTNode *bt)
{
if(bt==NULL) return;
inorder(bt->lchild);
printf("%d ",bt->data);
inorder(bt->rchild);
}
void postorder(BiTNode *bt)
{
if(bt==NULL) return;
postorder(bt->lchild);
postorder(bt->rchild);

提问的时候,最好先说明出了什么问题。
当使用指针做参数时,对指针的修改不会产生作用,因为你传进去的不过是指针的一个副本,就是你的CreateBiTree函数,我已经把它改成用指针的引用做参数,你可以试试下面的代码。

#include<stdio.h>
#include <conio.h>
#include<malloc.h>
#define BiTNode struct BiTNode

BiTNode
{
int data;
BiTNode *lchild,*rchild;
};
void CreateBiTree(BiTNode *&T)
{
int m;
scanf("%d",&m);

if(m==0)
{
T=NULL;
return ;
}
else{
T = (BiTNode*)malloc(sizeof(BiTNode));
T->data=m;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
}
void preorder(BiTNode *bt)
{
if(bt==NULL) return;
printf("%d ",bt->data);
preorder(bt->lchild);
preorder(bt->rchild);
}
void inorder(BiTNode *bt)
{
if(bt==NULL) return;
inorder(bt->lchild);
printf("%d ",bt->data);
inorder(bt->rchild);