鱼C论坛

 找回密码
 立即注册
查看: 1260|回复: 0

二叉树的非递归中序遍历(栈)不知道哪里错了

[复制链接]
发表于 2022-10-21 14:22:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <iostream>
#include <stdlib.h>
#define OK 1
#define MAXSIZE 100
#define ERROR -2
#define MAXSIZE 100
using namespace std;
typedef char TElemType;//二叉树的数据域数据类型为char型
typedef int Status;

typedef struct BiTNode {   //首先定义二叉树的结点
        TElemType data;
        struct BiTNode* lchild, * rchild;
} BiTNode, * BiTree;


typedef struct {  //定义栈的结构体
        BiTree* base;  //栈的指针类型为二叉树指针型
        BiTree* top;
        int stacksize;
}SqStack;

void InitStack(SqStack &S) {//初始化栈
        S.base = new BiTree[MAXSIZE];
        if (!S.base)  exit(OVERFLOW);
        S.top = S.base;
        S.stacksize = MAXSIZE;
}

Status StackEmpty(SqStack S) {

        if (S.top == S.base) return true;
        else return false;

}

int Push(SqStack &S, BiTree e) {//入栈
        if (S.top - S.base == S.stacksize)
                return ERROR;
        *S.top++ = e;//头指针所指内容为e
        return OK;
}

int POP(SqStack &S, BiTree &q) { //出栈
        if (S.top == S.base)
                return ERROR;
        q = *S.top;
        S.top--;
        return OK;
}

void InOrdertraverse(BiTree T) {
        SqStack S;//建立栈
        InitStack(S);//初始化栈
        BiTree p = T;//建立一个指向根节点的指针
        //BiTNode* q = new BiTNode;//申请一个指向二叉树的地址空间
        while (p || !StackEmpty(S)) {//只有当p地址为空或者栈为空时循环才会停止
                if (p) {//如果p不为空的话
                        Push(S, p);//把p内的地址入栈
                        p = p->lchild;//p指向左孩子
                }
                else {//如果p为空的话
                        POP(S, p);//把上一个结点出栈并输出
                        cout << p->data;
                        p = p->rchild;//把指针指向上一个结点的右孩子
                }
        }
}

void InOrderTraverse(BiTree T) {//中序遍历
        if (T) {
                InOrderTraverse(T->lchild);
                cout << T->data;
                InOrderTraverse(T->rchild);
        }

}
void CreateBiTree(BiTree& T) {
        char ch;
        cin >> ch;
        if (ch == '#')
                T = NULL;
        else {
                T = new BiTNode;
                T->data = ch;
                CreateBiTree(T->lchild);
                CreateBiTree(T->rchild);
        }
}

int main() {

        BiTree T;
        CreateBiTree(T);
        InOrdertraverse(T);


        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-21 13:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表