新手写的C++程序求大神帮忙,程序不报错但是输入完就无法向下执行了!!!!

题目:利用二叉链表作为存储结构建立一棵二叉树,每个节点中存放一种水果名(例如apple、orange、banana等,并要求从键盘输入),节点数不少于五个。要求分别以先序、中序和后序进行遍历,输出遍历结果。并编写一递归算法,交换该二叉树所有节点的左右孩子。
我的程序:
#include<iostream>
using namespace std;
struct BiTree
{
char data;
struct BiTree* lchild, *rchild;
};
BiTree* Create()
{
BiTree* T;
T = (BiTree*)malloc(sizeof(BiTree));
cin >> T->data;
if (T->data != '0')
{
T->lchild = Create();
T->rchild = Create();
return T;
}
else
return NULL;
}
void PreOrder(BiTree* root)
{
if (root == NULL)
return;
cout << root->data;
PreOrder(root->lchild);
PreOrder(root->rchild);
}
void InOrder(BiTree* root)
{
if (root == NULL)
return;
InOrder(root->lchild);
cout << root->data;
InOrder(root->rchild);
}
void PostOrder(BiTree* root)
{
if (root == NULL)
return;
PostOrder(root->lchild);
PostOrder(root->rchild);
cout << root->data;
}
BiTree* Exchange(BiTree *T)
{
BiTree* p;
p = (BiTree*)malloc(sizeof(BiTree));
p = T->rchild;
T->rchild = T->lchild;
T->lchild = p;
if (T->lchild != NULL)
{
T->lchild = Exchange(T->lchild);
}
if (T->rchild != NULL)
{
T->rchild = Exchange(T->rchild);
}
return T;
}
void main()
{
cout << "请输入水果名:";
BiTree* T = Create();
cout << endl << "先序遍历结果为:";
PreOrder(T);
cout << endl << "中序遍历的结果为:";
InOrder(T);
cout << endl << "后序遍历的结果为:";
PostOrder(T);
BiTree* P = Exchange(T);
cout << endl << "交换后先序遍历结果为:";
PreOrder(P);
cout << endl << "交换后中序遍历结果为:";
InOrder(P);
cout << endl << "交换后后序遍历结果为:";
PostOrder(P);
}

BiTree* Create()
{
    BiTree* T;
    T = (BiTree*)malloc(sizeof(BiTree));
    cin >> T->data;
    if (T->data != '0')
    {
        T->lchild = Create();    //这里返回的是BiTree类型,所以进入了递归Create(),又会让你输入,之后就进入了死循环,跳不出来了
        T->rchild = Create();
        return T;
    }
    else
        return NULL;    //如果输入0,那么Exchange里的p = T->rchild;会报错,T为空指针
}

追问

请问那我该怎么改才会对呢

温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答