二叉树的非递归前序遍历:
先访问根节点,后访问左子树,后访问右子树
访问过程需要回溯,用到栈
此处seqstack为自定义栈
typedef struct tree_node{
char data;
struct tree_node* lchild;
struct tree_node* rchild;
}treenode;
typedef treenode* bintree;
typedef struct stack{
bintree data[100];
int top;
}seqstack;
void preorder1(bintree t)
{
seqstack s;
s.top = 0;
while(t || s.top!=0)
{
//先访问根节点
if(t){
printf("%c",t->data);
push(&s,t);
t = t->lchild;//再访问左子树
}
//最后访问右子树
else{
t = pop(&s);
t = t->rchild;
}
}
}
二叉树的非递归中序遍历:
先访问左子树,后访问根节点,后访问右子树
类似前序遍历
void midorder1(bintree t)
{
seqstack s;
s.top = 0;
while(t || s.top!=0)
{
if(t){
push(&s,t);
t