| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 722 人关注过本帖
标题:关于二叉树非递归遍历是指针调用的问题
只看楼主 加入收藏
qq8801103
Rank: 5Rank: 5
来 自:苏州中科大软件学院
等 级:职业侠客
威 望:1
帖 子:422
专家分:340
注 册:2009-10-8
结帖率:73.96%
收藏
已结贴  问题点数:10 回复次数:3 
关于二叉树非递归遍历是指针调用的问题
#define STACK_INIT_SIZE 100
#define STACKINCREMENT  10
#include <stdio.h>
#include <stdlib.h>
typedef char TElemType;
typedef struct BiTNode
{
    TElemType data;
    struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
typedef struct
{
    BiTree *base;
    BiTree *top;
    int stacksize;
}SqStack;
void initialStack(SqStack *s)
{
    s->base=(BiTree *)malloc(STACK_INIT_SIZE*sizeof(BiTree));
    if(!s->base) exit(0);
    s->top=s->base;
    s->stacksize=STACK_INIT_SIZE;
}
void Push(SqStack *s,BiTNode *e)
{
    if(s->top-s->base>=s->stacksize)
    {
        s->base=(BiTree *)realloc(s->base,(STACK_INIT_SIZE+STACKINCREMENT)*sizeof(BiTree));
        if(!s->base) exit(0);
        s->top=s->base+s->stacksize;
        s->stacksize+=STACKINCREMENT;
    }
    *(s->top)++=e;
}
void Pop(SqStack *s,BiTree *e)
{
    if(s->top==s->base) exit(0);
    *e=*--(s->top);
}
int GetTop(SqStack *s,BiTree *e)
{
    if(s->top==s->base) return(0);
    *e=*(s->top-1);
    return(1);
}
int StackEmpty(SqStack *s)
{
    if(s->base==s->top)
        return(1);
    else
        return(0);
}

void CreatBiTree(BiTree *T)
{
    TElemType ch;
    scanf("%c",&ch);  fflush(stdin);
    if(ch=='#')
    *T=NULL;
    else
    {
    *T=(BiTNode *)malloc(sizeof(BiTNode));
    if(!*T)
            exit(0);
    (*T)->data=ch;
    CreatBiTree(&(*T)->lchild);
    CreatBiTree(&(*T)->rchild);
    }

}

void Visit(char p)
{
    printf("%c",p);
}
void InOrderTraverse(BiTree T)
{
    SqStack S;
    BiTree p;
    initialStack(&S);
    p=T;
    while(p||!StackEmpty(&S))
    {
        if(p)
        {
            Push(&S,p);
            p=p->lchild;
        }
        else
        {
            Pop(&S,&p);
        Visit(p->data);
            p=p->rchild;
        }
    }
}
void main()
{
    BiTree *t;
    printf("jianlishu:\n");
    printf("shurijieidian:");
    CreatBiTree(t);
    printf("zhongshubianlidejieguowei:");
    InOrderTraverse(*t);
    printf("\n");
}

不理解在构建二叉树中和遍历的时候,请解释一下 详细一点
搜索更多相关主题的帖子: 二叉树 遍历 递归 指针 
2010-05-21 20:00
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:3 

void main()
{
    BiTree t;
    printf("jianlishu:\n");
    printf("shurijieidian:");
    CreatBiTree(&t);
    printf("zhongshubianlidejieguowei:");
    InOrderTraverse(t);
    printf("\n");
}
图片附件: 游客没有浏览图片的权限,请 登录注册

2010-05-22 12:15
xichong
Rank: 7Rank: 7Rank: 7
来 自:四川南充
等 级:黑侠
威 望:2
帖 子:146
专家分:582
注 册:2009-6-10
收藏
得分:7 
建树返回的结果是根节点的指针,要让根节点的指针发生改变,就必须将指向树这种数据类型的指针变量BiTree t的地址即(&t传过去(此时函数中的形式参数类型为二级指针BiTree *T),即才能达到预期效果;也可以不传递参数,让建树函数void CreatBiTree()最后返回根节点的指针。
2010-05-22 18:25
qq8801103
Rank: 5Rank: 5
来 自:苏州中科大软件学院
等 级:职业侠客
威 望:1
帖 子:422
专家分:340
注 册:2009-10-8
收藏
得分:0 
谢谢了  问一下2楼的那个  你的编程工具是什么  可以传上来吗

Discuz!  
好好学习  天天向上
2010-05-24 14:00
快速回复:关于二叉树非递归遍历是指针调用的问题
数据加载中...
 
   



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

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