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

一、逻辑

声明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的右孩子
    }
  }
}

 

posted @ 2021-10-11 15:28  骚哥  阅读(290)  评论(0编辑  收藏  举报