数据结构之“实现非递归先序遍历二叉树的算法”


一、逻辑

声明BinTree对象为p,并判断传入的t是否为null,为null 直接返回,否则将t赋值给p

先将LS为执行链栈的指针,循环条件是当指针或栈至少有一个不为空的时候

如果p不为空,访问节点的数据,将当前指针压入栈中,将指针指向p的左孩子

否则取栈顶元素,出栈,指针指向右孩子

二、代码

void PreOrder(BinTree t)
{
  BinTree p;
  LkStk *LS;                // LS 为指向链栈指针
  if(t == NULL) return;
  InitStack(LS);
  p=t;
  while(p!=NULL || !EmptyStack(LS))   // 循环条件是当栈(p)和指针(LS)至少有一个不为空
  {
    if(p!=NULL)
    {
      Visit(p->data);          // 访问结点的数据
      Push(LS,p);            // 将当前指针压入栈中
      p=p->lchild;           // 将指针指向p的左孩子
    }
    else
    {
      p=Gettop(LS);           // 取栈顶元素
      Pop(LS);              // 出栈
      p=p->rchild;            // 指针指向p的右孩子
    }
  }
}

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM