用递归方式建立的二叉树不能输出,该怎么处理
用递归方式建立的二叉树不能输出
我用递归建立了二叉树,但是不能输出,请大家帮忙看看,小弟分不多,请见谅。上代码:
#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** 却没有输出,为什么?
------解决方案--------------------
我用递归建立了二叉树,但是不能输出,请大家帮忙看看,小弟分不多,请见谅。上代码:
#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; } }