1、实验内容
实现二叉树的先序、中序和后序遍历的递归和非递归算法
2、代码实现:
#include <iostream>
using namespace std;
typedef int Status;
#define OK 1
#define MAXSIZE 200
//1. 二叉树的基本操作算法实现
//(1)利用二叉树字符串“A(B(D, E(H(J, K(L, M(, N))))), C(F, G(, I)))”创建二叉树的二叉链式存储结构;
//(2)输出该二叉树;
//(3)输出‘H’节点的左、右孩子结点值;
//(4)输出该二叉树的结点个数、叶子结点个数、二叉树的度和高度;
//定义二叉树结构
typedef struct Node
{
char data;
struct Node *lchild, *rchild; //定义左右
}*BiTree, BiTNode;
//定义链栈结构
typedef struct SNode
{
BiTNode *data;
struct SNode *next;
}*LinkStack, SNode;
//构造一个空的链表
Status InitBiTree(BiTree &T)
{
T = NULL;
return OK;
}
//链栈的初始化
Status InitStack(LinkStack &S)
{
S = NULL;
return OK;
}
//入栈
Status PushStack(LinkStack &S, BiTNode *T)
{
SNode *p = new SNode;
p->data = T;
p->next = S;
S = p;
return OK;
}
//出栈
Status PopStack(LinkStack &S, BiTNode *&T)
{
if (S == NULL) cout << "空栈" << endl;
T = S->data;
SNode *p = S;
S = S->next;
delete p;
return OK;
}