调试环境:win10+vs2015
树是一种非常重要的数据结构,遍历树就变得尤为重要。
这里主要讲利用栈实现非递归遍历二叉树和利用队列实现层次遍历二叉树。
非递归遍历
首先需要编写一个树的结构体和相关函数
//声明一个树的结构体
typedef struct Tree {
char data; //存放的数据
struct Tree* left; //指向左孩子
struct Tree* right; //指向右孩子
}Tree,*pTree;
//初始化化二叉链表
pTree Init() {
pTree ptree = (pTree)malloc(sizeof(Tree)); //申请节点
ptree->data = 0; //赋初值
ptree->left = NULL;
ptree->right = NULL;
return ptree; //赋值
}
//先序遍历创建二叉链表
void Creat(pTree* ptree) { //传入一个树节点的指针
char c;
c = getchar(); //获取控制台的一个字符
if (c == '.')*ptree = NULL; //如果为“.”,就把该子树赋空
else {
*ptree = (pTree)malloc(sizeof(Tree)); //否则,申请节点
(*ptree)->data = c; //赋值
Creat(&((*ptree)->left)); //递归调用,创建左子树
Creat(&((*ptree)->right)); //递归调用,创建右子树
}
}
其次声明一个栈
//定义一个栈节点的结构体
typedef struct Stack {
pTree ptree; //存放子树
struc