首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

用递归方式建立的二叉树不能输出,该怎么处理

2012-05-27 
用递归方式建立的二叉树不能输出我用递归建立了二叉树,但是不能输出,请大家帮忙看看,小弟分不多,请见谅。上

用递归方式建立的二叉树不能输出
我用递归建立了二叉树,但是不能输出,请大家帮忙看看,小弟分不多,请见谅。上代码:


#include<stdio.h>
#include<stdlib.h>

struct BiTNode {
char data;
struct BiTNode* lchild; //二叉树的结构
struct BiTNode* rchild;
};

typedef struct BiTNode * BiTree ; 

void CreatBiTree( BiTree ); //创建二叉树
void PreOrderTraverse(BiTree ); // 遍历该二叉树,打印各个节点的值

main(){
BiTree T=NULL; //T为根节点

CreatBiTree( T ) ;
PreOrderTraverse( T ) ;

system("pause");
return 0;
}


//用先序递归过程建立二叉树

void CreatBiTree( BiTree T) {
char ch;

scanf("%c",&ch);
if( ch == '*') //如果输入星号则二叉树的节点为空节点
T=NULL;
else {
T=(BiTree)malloc( sizeof(struct BiTNode) ) ; //如果输入的不是星号。则为新节点分配内存空间
if(T!=NULL){
T->data=ch;  
CreatBiTree(T->lchild); //分配成功则继续建立左子树和右子树
CreatBiTree(T->rchild);  
}
else{
printf("内存分配失败!");  
return ;
}




void PreOrderTraverse(BiTree T){  
if (T) {
printf("%c",T->data); 
PreOrderTraverse(T->lchild) ; //遍历该树,输出各个节点的值
PreOrderTraverse(T->lchild) ;
}
else return;


我在屏幕上输入 ab**c** 却没有输出,为什么?




[解决办法]

C/C++ code
void CreatBiTree( BiTree &T)////传递指针的引用试试 {char ch;scanf("%c",&ch);if( ch == '*') //如果输入星号则二叉树的节点为空节点T=NULL;else {T=(BiTree)malloc( sizeof(struct BiTNode) ) ; //如果输入的不是星号。则为新节点分配内存空间if(T!=NULL){T->data=ch;   CreatBiTree(T->lchild); //分配成功则继续建立左子树和右子树CreatBiTree(T->rchild);   }else{printf("内存分配失败!");   return ; }}   }
[解决办法]
可能是创建二叉树的代码有点问题,改一下看看:
void CreatBiTree(BiTree *t)
{
char ch;
if((ch=getchar())==' ')
*t=null;
else
{
*t=(struct BiTNode *)malloc(sizeof(struct BiTNode));
(*t)->data=ch;
CreatBiTree(&(*t)->lchild);
CreatBiTree(&(*t)->rchild);
}
}

[解决办法]
void CreatBiTree( BiTree *T) {
char ch;
scanf("%c",&ch);
if(ch=='*')//如果输入星号则二叉树的节点为空节点
{
(*T) = NULL;
return;
}
else 
{
*T=(BiTree)malloc( sizeof(struct BiTNode) ) ; //如果输入的不是星号。则为新节点分配内存空间
if(*T!=NULL)
{
(*T)->data=ch;
CreatBiTree(&(*T)->lchild);//分配成功则继续建立左子树和右子树
CreatBiTree(&(*T)->rchild);
}
else{
printf("内存分配失败!");
return ; 
}
}
}

[解决办法]
C/C++ code
#include<stdio.h>#include<stdlib.h>struct BiTNode {char data;struct BiTNode* lchild; //二叉树的结构struct BiTNode* rchild;};typedef struct BiTNode * BiTree ;  void CreatBiTree( BiTree &); //创建二叉树--------------改成按引用创建二叉树void PreOrderTraverse(BiTree ); // 遍历该二叉树,打印各个节点的值int main(){BiTree T = NULL; //T为根节点CreatBiTree( T ) ;PreOrderTraverse( T ) ;system("pause");return 0;}//用先序递归过程建立二叉树void CreatBiTree( BiTree &T) {    char ch;    scanf("%c",&ch);    if( ch == '*') //如果输入星号则二叉树的节点为空节点    {        T=NULL;        return ;//缺少一个return    }    else     {        T=(BiTree)malloc( sizeof(struct BiTNode) ) ; //如果输入的不是星号。则为新节点分配内存空间        if(T!=NULL)        {            T->data=ch;            CreatBiTree(T->lchild); //分配成功则继续建立左子树和右子树            CreatBiTree(T->rchild);           }        else        {            printf("内存分配失败!");               return ;         }    }   }  void PreOrderTraverse(BiTree T){   if (T) {printf("%c",T->data);  PreOrderTraverse(T->lchild) ; //遍历该树,输出各个节点的值PreOrderTraverse(T->rchild) ;//----------这个地方有错}else{    return;}} 

热点排行