#include <iostream>
using namespace std;
#define MaxSize 50
typedef int ElemType;
typedef struct BT {
ElemType data;
struct BT* lchild;
struct BT* rchild;
}BT, *BiTree;
typedef struct Stack {
BiTree data[MaxSize];
int top;
}SqStack;
void init_s(SqStack &s) {
s.top = -1;
}
void push_s(SqStack &s, BiTree e) {
if (s.top == MaxSize)
return;
s.data[++s.top] = e;
}
void pop_s(SqStack &s) {
s.top--;
}
BiTree get_top(SqStack s) {
return s.data[s.top];
}
BiTree Create_T() {
BiTree T = new BT; T->data = 1;
T->lchild = new BT; T->lchild->data = 2;
T->rchild = new BT; T->rchild->data = 3;
T->lchild->lchild = new BT; T->lchild->lchild->data = 4;
T->lchild->rchild = new BT; T->lchild->rchild->data = 5;
T->rchild->rchild = new BT; T->rchild->rchild->data = 6;
T->lchild->lchild->lchild = NULL;
T->lchild->lchild->rchild = NULL;
T->lchild->rchild->lchild = NULL;
T->lchild->rchild->rchild = NULL;
T->rchild->lchild = NULL;
T->rchild->rchild->lchild = NULL;
T->rchild->rchild->rchild = NULL;
return T;
}
//中序遍历
void in_order1(BiTree T) {
if (T) {
in_order1(T->lchild);
cout << T->data << " ";
in_order1(T->rchild);
}
}
//中序遍历非递归遍历
void in_order2(BiTree T) {
SqStack s;
init_s(s);
BiTree p = T;
while (p || s.top != -1) {
if (p) {
push_s(s, p);
p = p->lchild;
}
else {
p = get_top(s);
pop_s(s);
cout << p->data << " ";
p = p->rchild;
}
}
}
int main()
{
BiTree T = Create_T();
cout << "中序遍历(递归):";
in_order1(T);
cout << endl;
cout << "中序遍历(非递归):";
in_order2(T);
cout << endl;
return 0;
}
数据结构——025中序遍历的非递归遍历
最新推荐文章于 2021-09-17 18:01:56 发布