建二叉树的问题,,大侠帮忙
下面一段代码是关于建二叉树的,,建第一棵树没问题,,可是接着第二棵建不进去,怎么回事?
#include<stdio.h>
#include<iostream>
#include<malloc.h>
#include<process.h>
using namespace std;
typedef char TElemType;
typedef struct BiTNode {
TElemType data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
int InitBiTree(BiTree &T) {
T=NULL;
return 1;
}
void CreateBiTree(BiTree &T) { // 建二叉树
char ch;
ch = getchar();
if(ch == ' ') T = NULL;
else {
if(!(T = (BiTNode *)malloc(sizeof(BiTNode)))) exit(-1);
T->data = ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
}
int Visit(TElemType e) { // 访问数据域
cout<<e<<' ';
return 1;
}
int PreOrderTraverse(BiTree T,int(* Visit)(TElemType e)) { // 先序遍历
if(T)
if(Visit(T->data))
if(PreOrderTraverse(T->lchild,Visit))
if(PreOrderTraverse(T->rchild,Visit))
return 1;
else return 0;
}
void main() {
BiTree T1,T2;
int Height,Width;
cout<<"构造二叉树 T1 :"<<endl;
InitBiTree(T1);
CreateBiTree(T1);
InitBiTree(T2);
cout<<"构造二叉树 T2 :"<<endl;
CreateBiTree(T2); // 第二棵树建立不了
cout<<endl<<"先序遍历二叉树: "<<endl;
PreOrderTraverse(T2,Visit);
}
[解决办法]
scanf("%c",&ch);
fflush(stdin);
这里要这样用,要不有可能你建树的时候缓冲区内有残留的数据导致你建树出错。
还有就是void CreateBiTree(BiTree *T) 这里要传指针的指针才对,c语言是按值传递的,这里要多理解一下。