| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 522 人关注过本帖
标题:求教!!!!
取消只看楼主 加入收藏
石头123
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2012-12-8
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:1 
求教!!!!
有以下程序,我实在是弄不明白递归创建的具体过程是怎样的,请各位大哥不吝指教,把递归创建的过程讲一下
比如说 输入序列:1 2 3 -1 -1 -1 4 5 -1 -1 6 -1 -1
template <class T>
void BinaryTree<T>::CreateBiTree(T end)
{    //创建一棵二叉树:先序序列的顺序输入数据,end为结束的标志
    cout<<"请按先序序列的顺序输入二叉树,-1为空指针域标志:"<<endl;
    BTNode<T>*p;
    T x;
    cin>>x;                //输入根结点的数据
    if(x==end) return ;    //end 表示指针为空,说明树为空
    p=new BTNode<T>;    //申请内存
    if(!p)
    {
        cout<<"申请内存失败!"<<endl;
        exit(-1);//申请内存失败退出
    }
    p->data=x;
    p->lchild=NULL;
    p->rchild=NULL;
    BT=p;            //根结点
    create(p,1,end);//创建根结点左子树,1为标志,表示左子树
    create(p,2,end);//创建根结点右子树,2为标志,表示右子树
}

template <class T>
static int create(BTNode<T>*p,int k,T end)
{//静态函数,创建二叉树,k为创建左子树还是右子树的标志,end为空指针域的标志
    BTNode<T>*q;
    T x;
    cin>>x;
    if(x!=end)
    {                        //先序顺序输入数据
        q=new BTNode<T>;
        q->data=x;
        q->lchild=NULL;
        q->rchild=NULL;
        if(k==1) p->lchild=q;    //q为左子树
        if(k==2) p->rchild=q;    //p为右子树
        create(q,1,end);        //递归创建左子树
        create(q,2,end);        //递归创建右子树
    }
    return 0;
}
搜索更多相关主题的帖子: return 二叉树 
2012-12-11 10:21
石头123
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2012-12-8
收藏
得分:0 
回复 2楼 yuccn
1,if(x==end) return ;这条语句return空格是什么意思,它怎么就能说明树为空呢?
2,以前面的序列:1 2 3 -1 -1 -1 4 5 -1 -1 6 -1 -1 为例,遇到了第一个-1 时,执行return 0对吧;return 0起什么作用?那接下来是执行哪一条语句呢?我就是不明白后面的具体流程,怎么一步一步地建成二叉树?还希望高手能耐心地指导一下?
2012-12-11 21:42
快速回复:求教!!!!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.028453 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved