1.二叉树的递归遍历
1.1前序递归遍历
void preorder(NODE *root)
{
if(root != 0)
{
printf("%c ", root->data);
preorder(root->lchild);
preorder(root->rchild);
}
}
1.2中序递归遍历
void midorder(NODE *root)
{
if(root != 0)
{
midorder(root->lchild);
printf("%c ", root->data);
midorder(root->rchild);
}
}
1.3后序递归遍历
void posorder(NODE *root)
{
if(root != 0)
{
posorder(root->lchild);
posorder(root->rchild);
printf("%c ", root->data);
}
}
2.二叉树的非递归遍历
2.1前序非递归遍历
void preorder(NODE *root)
{
NODE *stack[MAXN];
NODE *p = root;
int top = 0;
while(p != 0 || top > 0)
{
while(p != 0)
{
printf("%c ", p->data);
stack[top++] = p;
p = p->lchild;
}
if(top > 0)
{
p = stack[--top];
p = p->rchild;
}
}
}
2.2中序非递归遍历
void midorder(NODE *root)
{
NODE *stack[MAXN];
NODE *p = root;
int top = 0;
while(p != 0 || top > 0)
{
while(p != 0)
{
stack[top++] = p;
p = p->lchild;
}
if(top > 0)
{
p = stack[--top];
printf("%c ", p->data);
p = p->rchild;
}
}
}
2.3后序非递归遍历
void posorder(NODE *root)
{
NODE *stack[MAXN];
NODE *cur, *pre = 0;
int top = 0;
stack[top++] = root;
while(top > 0)
{
cur = stack[top-1];
if((cur->lchild == 0 && cur->rchild == 0