请问我为什么结束不了输入
程序代码:
#include<malloc.h> #include<stdio.h> #include<stdlib.h> #include<math.h> #define false 1; typedef char DataType; typedef struct node{ DataType data; struct node *lchild,*rchild; }BiTNode; typedef BiTNode *BiTree; void CreateBiTree(BiTree &T){ char ch; ch=getchar(); if(ch=='0') T=NULL; else{ T=(BiTNode*)malloc(sizeof(BiTNode)); T->data=ch; CreateBiTree(T->lchild); CreateBiTree(T->rchild); } } void visit(char e){ printf("%c ",e); // } int PreOrderTraverse(BiTree T,void(*Visit)(char e)) { // 初始条件:二叉树T存在,Visit是对结点操作的应用函数。 // 操作结果:先序递归遍历T,对每个结点调用函数Visit一次且仅一次 if(T!=NULL) // T不空 { Visit(T->data); // 先访问根结点 PreOrderTraverse(T->lchild,Visit); // 再先序遍历左子树 PreOrderTraverse(T->rchild,Visit); // 最后先序遍历右子树 } return 0; } void InOrderTraverse(BiTree T,void(*Visit)(char e)) { // 初始条件:二叉树T存在,Visit是对结点操作的应用函数 // 操作结果:中序递归遍历T,对每个结点调用函数Visit一次且仅一次 if(T!=NULL) { InOrderTraverse(T->lchild,Visit); // 先中序遍历左子树 Visit(T->data); // 再访问根结点 InOrderTraverse(T->rchild,Visit); // 最后中序遍历右子树 }; } void PostOrderTraverse(BiTree T,void(*Visit)(char e)) { // 初始条件:二叉树T存在,Visit是对结点操作的应用函数 // 操作结果:后序递归遍历T,对每个结点调用函数Visit一次且仅一次 if(T!=NULL) // T不空 { PostOrderTraverse(T->lchild,Visit); // 先后序遍历左子树 PostOrderTraverse(T->rchild,Visit); // 再后序遍历右子树 Visit(T->data); // 最后访问根结点 } } void main() { BiTree T; printf("按先序次序输入二叉树中结点的值,输入0表示节点为空,输入范例:1 2 0 0 3 0 0\n"); CreateBiTree(T); // 建立二叉树T printf("先序递归遍历二叉树:\n"); PreOrderTraverse(T,visit); // 先序递归遍历二叉树T printf("\n中序递归遍历二叉树:\n"); InOrderTraverse(T,visit); // 中序递归遍历二叉树T printf("\n后序递归遍历二叉树:\n"); PostOrderTraverse(T,visit); // 后序递归遍历二叉树T }