回 帖 发 新 帖 刷新版面

主题:[讨论]为什么我递归创建的2叉树无法输出

struct BiTree//.......定义2叉树........
{
    int data;
    BiTree*lchild;
    BiTree*rchild;
};
BiTree*create(BiTree*T)//.......创建2叉树.......
{
    int ch;
    cout<<"输入结点的值"<<endl;
cin>>ch;
if(ch==999)
{
    T=NULL;
    cout<<"输入结束"<<endl;
}
else {
    T=new BiTree;
    cout<<"继续输入,输入999结束:"<<endl;
    T->data=ch;//生成根结点
    cout<<T->data<<"'s left:"<<endl;
    create(T->lchild);
    cout<<T->data<<"'s right:"<<endl;
    create(T->rchild);
    
}//else
return T;
}//create
void preorder(BiTree*T)......递归先序遍历........
{
if(T)
{
cout<<T->data;
preorder(T->lchild);
preorder(T->rchild);
}
}//

回复列表 (共1个回复)

沙发

BiTree* create(BiTree*& T)//BiTree* T => BiTree*& T 如果不改为引用,T的值将无法在递归调用
                          //中修改
{
    int ch;
    cout<<"输入结点的值"<<endl;
    cin>>ch;
    if(ch == 999)
    {
        T=NULL;
        cout<<"输入结束"<<endl;
    }
    else {
        T=new BiTree;
        cout<<"继续输入,输入999结束:"<<endl;
        T->data=ch;//生成根结点
        cout<<T->data<<"'s left:"<<endl;
        create(T->lchild);
        cout<<T->data<<"'s right:"<<endl;
        create(T->rchild);
        
    }//else
    return T;
}//create

void preorder(BiTree*T)//......递归先序遍历........
{
    if(T)
    {
        cout<<T->data<<" "; //为了显示清楚,添加了一个空格
        preorder(T->lchild);
        preorder(T->rchild);
    }
}//

我来回复

您尚未登录,请登录后再回复。点此登录或注册