二叉树的遍历

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;
   }
  }
 }
}

以上是关于二叉树的遍历的主要内容,如果未能解决你的问题,请参考以下文章

二叉树的遍历

讲透学烂二叉树:二叉树的遍历图解算法步骤及JS代码

二叉树(2.二叉树的遍历和实现)

根据二叉树的前序遍历和中序遍历构建二叉树的c语言完整代码

通过遍历序列构造二叉树(扩展二叉树的先序先序和中序后序和中序层序和中序)附可执行完整代码

代码题— 二叉树的层次遍历