| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3596 人关注过本帖
标题:【求调试找错】先序遍历的递归算法和中序遍历二叉树的非递归算法的C语言实现 ...
取消只看楼主 加入收藏
听潮
Rank: 2
等 级:论坛游民
帖 子:18
专家分:10
注 册:2016-4-21
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:3 
【求调试找错】先序遍历的递归算法和中序遍历二叉树的非递归算法的C语言实现(总是程序停止运行)
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define OVERFLOW 1
#define OK 0
#define ERROR 1
typedef struct BiTNode{
    int data;
    struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
typedef struct{
    BiTree *base;
    BiTree *top;
    int stacksize;
}SqStack;
void InitBiTree(BiTree &T){
    T=NULL;
}
int CreateBiTree(BiTree &T){
    int c;
    scanf("%d",&c);
    if(c==0) T=NULL;
    else{
        if(!(T=(BiTNode*)malloc(sizeof(BiTNode))))
        exit(OVERFLOW);
        T->data=c;
        CreateBiTree(T->lchild);
        CreateBiTree(T->rchild);
    }
}

int printelemt(int e){
    printf("%d",e);
    return OK;
}
int PreorderTraverse(BiTree T,int(*visit)(int e)){
    if(T){
        visit(T->data);
        PreorderTraverse(T->lchild,visit);
        PreorderTraverse(T->rchild,visit);
        
    }
}
int InitStack(SqStack &S){
    S.base=(BiTree*)malloc(STACK_INIT_SIZE*sizeof(BiTree));
    if(!S.base) exit(OVERFLOW);
    S.top=S.base;
    S.stacksize=STACK_INIT_SIZE;
    return OK;
}
int Push(SqStack &S,BiTree e){
    if(S.top-S.base>=S.stacksize){
        S.base=(BiTree*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(BiTree));
        if(!S.base)
        printf("OVERFLOW");
        S.top=S.base+S.stacksize;
        S.stacksize+=STACKINCREMENT;
    }
    *S.top++=e;
}
int Pop(SqStack &S,BiTree &e){
    if(S.top == S.base)  
    return ERROR;  
    e =*--S.top;  
    return OK;  
}
int StackEmpty(SqStack &S)  
{  
if(S.top == S.base)  
return OK;  
else  
return ERROR;  
}  
int InorderTraverse(BiTree T,int(*visit)(int e)){
    SqStack S;
    InitStack(S);
    BiTree P=T;
    while(P||!StackEmpty(S)){
    SqStack S;
    InitStack(S);
    BiTree p;
    p = T;
    while(p || !StackEmpty(S)) {
        if(p) {
            Push(S,P);
            P= P->lchild;
        }
        else{  
            Pop(S,P);
            if(!visit(P->data)) return ERROR;
            P = P->rchild;
        }
    }
}
 return OK;}

int main()
{
    BiTree T;
    InitBiTree(T);
    CreateBiTree(T);
    PreorderTraverse(T,printelemt);
    printf("\n");
    InorderTraverse(T,printelemt);
}   
收到的鲜花
搜索更多相关主题的帖子: include 二叉树 C语言 
2016-04-21 08:59
听潮
Rank: 2
等 级:论坛游民
帖 子:18
专家分:10
注 册:2016-4-21
收藏
得分:0 
回复 2楼 azzbcc
可是这是按照书上给出的来的,也不知道为什么错的==
2016-04-22 23:46
听潮
Rank: 2
等 级:论坛游民
帖 子:18
专家分:10
注 册:2016-4-21
收藏
得分:0 
回复 4楼 zhulei1978
你写的是树上第一种非递归算法,我写的是第二种,但是两种我都试过,可以运行,但输入结果后出现程序错误
2016-04-23 18:36
听潮
Rank: 2
等 级:论坛游民
帖 子:18
专家分:10
注 册:2016-4-21
收藏
得分:0 
回复 2楼 azzbcc
多谢,用你的是可以得出结果的,树上出问题了,老师和我们说了
2016-04-23 18:41
快速回复:【求调试找错】先序遍历的递归算法和中序遍历二叉树的非递归算法的C语 ...
数据加载中...
 
   



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

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