使用VS2019 运行代码不报错,但是程序异常
#pragma once
#include
using namespace std;
// 创建一个二叉树模板 链式
typedef struct BiTree
{
char data;
BiTree* lchild;
BiTree* rchild;
}BiTree;
// 先序创建二叉树 ‘#’表示空的
void CreateBiTree(BiTree *T)
{
char ch;
cout << "请输入内容\n";
cin>>ch;
if (ch == '#') T = nullptr;
else
{
if (!(T = (BiTree*)malloc(sizeof(BiTree)))) exit(0);
else
T->data = ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
}
const int Maxsize = 20;
//创建一个栈结构 顺序表
typedef struct
{
char* top;
char* base;
}SqStack;
//初始化栈
int InitStack(SqStack &S)
{
S.base = new char;
if (!S.base) exit(0);
S.top = S.base;
return 1;
}
//入栈
void Push(SqStack& S,BiTree e)
{
if (S.top - S.base == Maxsize) cout << "栈满\n";
*S.top = e.data;
S.top++;
}
//出栈
void Pop(SqStack& S,BiTree e)
{
if (S.top == S.base) cout << "栈空\n";
--S.top;
*S.top = e.data;
}
//判断栈空
int StackEmpty(SqStack S)
{
if (S.top == S.base) return 0;
else
return 1;
}
//中序遍历二叉树并输出
void InOrderTraverse(BiTree* T)
{
BiTree* p = T;
SqStack s;
InitStack(s);
BiTree* q = T;
q = T;
while (p != nullptr || StackEmpty(s) != 0)
{
if (p != nullptr)
{
Push(s, *p);
p = p->lchild;
}
else
{
Pop(s, *q);
cout << q->data << endl;
p = q->rchild;
}
}
}