二叉树的遍历
Posted brage
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树的遍历相关的知识,希望对你有一定的参考价值。
递归实现结构很好记,上来写两递归,递归左子树,递归右子树。
前序遍历,访问节点(打印节点)在两个递归前面——中、左、右;
中序遍历,访问放递归中间——左中右;
后序遍历,先两递归,最后才访问——左、中、右。
1)先序遍历
void preorder(BiTree T)
{
if (T != NULL)
{
visit(T);
preorder(T->lchild);
preorder(T->rchild);
}
}
2)中序遍历
void inorder(BiTree T)
{
if (T != NULL)
{
inorder(T->lchild);
visit(T);
inorder(T->rchild);
}
}
3)中序遍历利用栈
void inorder1(BiTree T)
{
Sqstack S;
initstack(S);
BiTree p = T;
while (p||!stackempty(S))
{
if (p)
{
push(S, p->data);
p = p->lchild;
}
else
{
pop(S, p->data);
visit(p);
p = p->rchild;
}
}
}
4)后序遍历
void postorder(BiTree T)
{
if (T != NULL)
{
postorder(T->lchild);
postorder(T->rchild);
visit(T);
}
}
5)后序遍历非递归
void postorder1(BiTree T)
{
Sqstack S;
BiTNode *r,*p;
//BiTree p;
initstack(S);
p = T;
r = NULL;
while (p||!stackempty(S))
{
if (p)
{
push(S, p->data);
p = p->lchild;
}
else
{
pop(S, p->data);
if (p->rchild&&p->rchild != r)
{
p = p->rchild;
push(S, p->data);
p = p->lchild;
}
else
{
pop(S, p->data);
visit(p);
r = p;
p = NULL;
}
}
}
}
以上是关于二叉树的遍历的主要内容,如果未能解决你的问题,请参考以下文章