二叉树中序遍历的非递归算法同样可以使用栈来实现,从根结点开始,将根结点的最左结点全部压栈,当结点p不再有最左结点时,说明结点p没有左孩子,将该结点
出栈,访问结点p,然后对其右孩子做同样的处理。
二叉树中序遍历非递归算法实现如下:
#include <stdlib.h> #include <stdio.h> #define MAXSIZE 100 // 定义结点类型 typedef struct node { int data; struct node* lchild; struct node* rchild; } BTnode; void Inorder(BTnode* t) { BTnode* Seqstack[MAXSIZE]; int top = -1; BTnode* p; if(t != NULL) { p = t; while(top > -1 || p != NULL) { while(p != NULL) // while循环将根结点的最左结点全部压栈 { top ++; Seqstack[top] = p; p = p->lchild; } if(top > -1) // 当结点p没有最左结点时出栈 { p = Seqstack[top]; printf("%d ", p->data); // 访问结点p top --; p = p->rchild; // 转向处理右孩子结点 } } } }