二叉树非递归中序遍历?

发布于 2022-09-12 22:41:26 字数 2414 浏览 25 评论 0

我用vs2019实现C语言二叉树非递归中序遍历时,遍历时(InOrderTraverse(BiTree T))函数中打印没实现。

问题代码:

Status InOrderTraverse(BiTree T)  //非递归中序遍历
{
    BiTree P;
    SqStack S;
    InitStack(&S);
    P = T;
    while (P || !StackEmpty(S))
    {
        while (P)
        {
            Push(&S,P);
            P = P->lchild;
        }
        if (!StackEmpty(S))
        {
            Pop(&S, &P);
            printf("%c", P->data);
            P = P->rchild;
        }
    }
    return OK;
}

完整源码:

#include<stdio.h>
#include<stdlib.h>
#define MaxSize 100
#define OK 1
#define ERROR 0
typedef char ElemType;
typedef int Status;
typedef struct {
    ElemType* base;
    ElemType* top;
    int StackSize;
}SqStack; //顺序栈
Status InitStack(SqStack* S)  //初始化
{
    S->base = (ElemType*)malloc(sizeof(ElemType) * MaxSize);
    if (!S->base)
        exit(0);
    S->top = S->base;
    S->StackSize = MaxSize;
    return OK;
}
Status StackEmpty(SqStack S)  //判断是否为空栈
{
    if (S.base == S.top)
        return OK;
    else
        ERROR;
}
Status Push(SqStack* S, ElemType e)  //入栈
{
    if (!S->base)
        return ERROR;
    *(S->top) = e;
    S->top++;
    return OK;
}
Status Pop(SqStack* S, ElemType* e)  //出栈
{
    if (S->base == S->top)
        return ERROR;
    *e = *(S->top - 1);
    S->top--;
    return OK;
}
typedef struct BiNode {
    ElemType data;
    struct BiNode* lchild, * rchild;
}BiNode, * BiTree;
Status Create_BiTree(BiTree *T)  //初始化二叉树
{
    char ch;
    scanf("%c", &ch);
    if (ch == '#')
    {
        *T = NULL;
    }
    else
    {
        *T = (BiTree)malloc(sizeof(BiNode));
        (*T)->data = ch;
        Create_BiTree(&(*T)->lchild);
        Create_BiTree(&(*T)->rchild);
    }
    return OK;
}
Status InOrderTraverse(BiTree T)  //非递归中序遍历
{
    BiTree P;
    SqStack S;
    InitStack(&S);
    P = T;
    while (P || !StackEmpty(S))
    {
        while (P)
        {
            Push(&S,P);
            P = P->lchild;
        }
        if (!StackEmpty(S))
        {
            Pop(&S, &P);
            printf("%c", P->data);
            P = P->rchild;
        }
    }
    return OK;
}
int main()
{
    BiTree T;
    printf("请输入字符(#表示空指针):");
    Create_BiTree(&T);
    printf("非递归遍历:");
    InOrderTraverse(T);

    return 0;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文