码迷,mamicode.com
首页 > 其他好文 > 详细

二叉树的遍历

时间:2020-05-14 15:51:55      阅读:66      评论:0      收藏:0      [点我收藏+]

标签:中序   dash   lse   stack   tree   遍历   后序遍历   empty   实现   

递归实现结构很好记,上来写两递归,递归左子树,递归右子树。

前序遍历,访问节点(打印节点)在两个递归前面——中、左、右;

中序遍历,访问放递归中间——左中右;

后序遍历,先两递归,最后才访问——左、中、右。

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

二叉树的遍历

标签:中序   dash   lse   stack   tree   遍历   后序遍历   empty   实现   

原文地址:https://www.cnblogs.com/brage/p/12888415.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!