| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 473 人关注过本帖
标题:树的遍历,用栈解决。。。出不了结果,望指教。。谢谢!!!
只看楼主 加入收藏
tzhg555
Rank: 1
等 级:新手上路
帖 子:10
专家分:1
注 册:2010-12-5
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:4 
树的遍历,用栈解决。。。出不了结果,望指教。。谢谢!!!
# include <stdio.h>
# include<malloc.h>
typedef struct BiTNode
{
    char data;
    struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;

typedef struct
{
    BiTree base;
    BiTree top;
}SqStack;

SqStack InitStack(SqStack S)
{
    S.base=(struct BiTNode *)malloc(100*sizeof(struct BiTNode));
    S.top=S.base;
    return S;
}

int GetTop(SqStack S,BiTree e)
{
    S.top--;
    e=S.top;
    S.top++;
    return 1;
}

SqStack Push(SqStack S,BiTree e)
{
       S.top=e;
       S.top++;
       return S;
}

void visit(char e)
{
    printf("%c",e);
}
int StackEmpty(SqStack S)
{
    if(S.base==S.top)
        return 1;
    else
        return 0;
}
SqStack Pop(SqStack S,BiTree e)
{
    e=--S.top;
    return S;
}
void InOrderTraverse(BiTree T)
{
    BiTree p;
    SqStack S;
    S=InitStack(S);
    S=Push(S,T);
    while(!StackEmpty(S))
    {
        while(GetTop(S,p)&&p) S=Push(S,p->lchild);
        S=Pop(S,p);
        if(!StackEmpty(S))
        {
            S=Pop(S,p);
            visit(p->data);
            S=Push(S,p->rchild);
        }
    }
}
BiTree CreateBiTree(BiTree T)
{
    char ch;
    scanf("%c",&ch);
    if(ch==' ') T=NULL;
    else
    {
        T=(BiTNode *)malloc(sizeof(BiTNode));
        T->data=ch;
        T->lchild=CreateBiTree(T->lchild);
        T->rchild=CreateBiTree(T->rchild);
    }
    return T;
}
void main()
{
        BiTree T;
        T=(BiTNode *)malloc(sizeof(BiTNode));
        T=CreateBiTree(T);
        InOrderTraverse(T);
}
搜索更多相关主题的帖子: include return 
2010-12-05 18:48
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:10 
# include <stdio.h>
# include<malloc.h>
typedef struct BiTNode
{
    char data;
    struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;

typedef struct
{
    BiTree *base;
    BiTree *top;
}SqStack;

SqStack InitStack(SqStack S)
{
    S.base=(BiTree *)malloc(100*sizeof(BiTree));
    S.top=S.base;
    return S;
}

int GetTop(SqStack S,BiTree *e)
{
 //   S.top--;
    *e=*(S.top-1);
    //S.top++;
    return 1;
}

SqStack Push(SqStack S,BiTree e)
{
       *S.top = e;
       S.top++;
       return S;
}

void visit(char e)
{
    printf("%c ",e);
}
int StackEmpty(SqStack S)
{
    if(S.base==S.top)
        return 1;
    else
        return 0;
}
SqStack Pop(SqStack S,BiTree *e)
{
    *e=*--S.top;
    return S;
}
void InOrderTraverse(BiTree T)
{
    BiTree p;
    SqStack S;
    S=InitStack(S);
    S=Push(S,T);
    while(!StackEmpty(S))
    {
        while( GetTop(S,&p) && p )
            S=Push(S,p->lchild);
        S=Pop(S,&p);
        if(!StackEmpty(S))
        {
            S=Pop(S,&p);
            visit(p->data);
            S=Push(S,p->rchild);
        }
    }
}
BiTree CreateBiTree(BiTree T)
{
    char ch;
    scanf("%c",&ch);
    getchar();
    if(ch==' ')
        T=NULL;
    else
    {
        T=(BiTNode *)malloc(sizeof(BiTNode));
        T->data=ch;
        T->lchild=CreateBiTree(T->lchild);
        T->rchild=CreateBiTree(T->rchild);
    }
    return T;
}
void main()
{
        BiTree T;
        //T=(BiTNode *)malloc(sizeof(BiTNode));
        T=CreateBiTree(T);
        InOrderTraverse(T);
        printf("\n");
}
收到的鲜花
  • tzhg5552010-12-06 12:49 送鲜花  3朵  
2010-12-05 22:22
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:10 
图片附件: 游客没有浏览图片的权限,请 登录注册
2010-12-05 22:23
tzhg555
Rank: 1
等 级:新手上路
帖 子:10
专家分:1
注 册:2010-12-5
收藏
得分:0 
非常感谢。。。CreateBiTree里面的getchar()好像不需要啊。。。现在出来了,真的非常感谢!!!
2010-12-06 12:39
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:0 
2010-12-06 13:00
快速回复:树的遍历,用栈解决。。。出不了结果,望指教。。谢谢!!!
数据加载中...
 
   



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

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