| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 413 人关注过本帖
标题:求大侠帮忙:先序非递归建立二叉树,然后中序非递归输出各节点。
只看楼主 加入收藏
罗马龙骑士
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2012-9-14
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:5 
求大侠帮忙:先序非递归建立二叉树,然后中序非递归输出各节点。
#include<iostream>
using namespace std;
struct binnode
{
char data;
binnode *lchild,*rchild;
};
typedef binnode *bintree;
struct seqstack
{
bintree data[100];
int top;
}s;
seqstack push(seqstack s,bintree x)
{
s.top++;
s.data [s.top ]=x;
return s;
}
seqstack pop(seqstack s)
{
s.top --;
return s;
}

bintree createtree()        //先序输入                                            

                                                
{
    bool right = false;                  
    bintree p,root;
    seqstack s;
    s.top=0;
    char ch;
    cin>>ch;
    if(ch=='#')
         root=NULL;
    else
    {
        root=(binnode*)malloc(sizeof(bintree));
        root->data=ch;
        root->lchild=root->rchild=NULL;
        push( s, root);
    }
    cin>>ch;
    while(!(s.top==0)||ch!='#')                                
     {
        if(ch!='#'&& right == false)                    
        {    p=root;
             p=(binnode*)malloc(sizeof(bintree));
             p->data=ch;
             p->lchild=p->rchild=NULL;
             root->lchild=p;
             root=p;
             push( s, root);
         }
         if (ch =='#')
         {
             pop( s);
             right = true;
         }
        if (ch!='#'&& right == true)
         {
             p=(binnode *)malloc(sizeof(bintree));
             p->data=ch;
             p->lchild=p->rchild=NULL;
             root->rchild=p;
             root=p;
             push( s,  root);
             right = false;
         }
         cin>>ch;
    }
     return root;
}

void inordertree(bintree t)
{
    bintree p=t;
    seqstack s;
    s.top =0;
    cout<<"output inorder root:"<<endl;
    while(p||s.top >0)
        {
            if(p)
                {
                    s.data [s.top ++]=p;
                    p=p->lchild ;
                }
            else
                {
                    p=s.data [--s.top ];
                    cout<<p->data ;
                    p=p->rchild ;
                }
        }
        cout<<endl;
}

void main()
{
    bintree root;
    cout<<"请先序输入各结点以建立二叉树:"<<endl;
    root=createtree();
    inordertree(root);

}
搜索更多相关主题的帖子: pop top include return 二叉树 
2012-11-14 13:53
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:0 
抛出问题    给出    执行案列
2012-11-14 16:47
罗马龙骑士
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2012-9-14
收藏
得分:0 
求大侠帮忙:先序非递归建立二叉树,然后中序非递归输出各节点时,只输岀了一个结点就结束了,不知建立二叉树时错在哪儿?
求大侠帮忙:先序非递归建立二叉树,然后中序非递归输出各节点时,只输岀了一个结点就结束了,不知建立二叉树时错在哪儿?
2012-11-15 11:40
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:0 
回复 3楼 罗马龙骑士
希望你给出一组数据   在建树的时候  是怎么操作的

2012-11-15 11:45
罗马龙骑士
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2012-9-14
收藏
得分:0 
例如输入:AB##C##时,只输出B 程序就结束了。
2012-11-15 21:22
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:20 
程序代码:
  while(!(s.top==0)||ch!='#')                              
      {
         if(ch!='#'&& right == false)                  
         {    p=root;
              p=(binnode*)malloc(sizeof(bintree));
              p->data=ch;
              p->lchild=p->rchild=NULL;
              root->lchild=p;
              root=p;
              push( s, root);
          }
          if (ch =='#')
          {
              pop( s);
              right = true;
          }
         if (ch!='#'&& right == true)
          {
              p=(binnode *)malloc(sizeof(bintree));
              p->data=ch;
              p->lchild=p->rchild=NULL;
              root->rchild=p;
              root=p;
              push( s,  root);
              right = false;
          }
          cin>>ch;
     }

这块 逻辑有问题     最好还是仿照 书本上的来写  虽然难看懂点......
2012-11-16 15:43
快速回复:求大侠帮忙:先序非递归建立二叉树,然后中序非递归输出各节点。
数据加载中...
 
   



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

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