虽然递归简单理解,但是用递归内存开销大,耗时长,性能往往不如非递归方式
所以这里通过栈,用非递归方法实现二叉树的先序遍历
二叉树的存储结构定义:
typedef struct node{
int data;
struct node * lchild; //指向左孩子的结点
struct node * rchild; //指向右孩子的结点
}BTNode;
思路:(根 右 左,由于要使用栈,会和原本的不同)
1,定义一个栈,定义初始化。
2.判断二叉树是否为空,不为空,则将根节点入栈。
3.当栈不为空时,循环。
3.1 退栈并访问该节点
3.2右孩子节点进栈
3.3左孩子节点进栈
C代码实现:
void PreOrder1(BTNode * b){
BTNode * St[Maxsize],*p; //定义一个栈,和一个存放根节点的指针变量
int top = -1; //初始化栈
if(b != null){
top++;
St[top] = b; //根节点进栈
while(top > -1){
p = St[top];
top--;
printf("%c",p->data); //退栈并访问根节点
if(b->rchild != null){ //右孩子进栈
top++;
St[top] = p->rchild;
}
if(b->lchild != null){ //左孩子进栈
top++;
St[top] = p->lchild;
}
}
}
}