數據結構之“實現非遞歸先序遍歷二叉樹的算法”


一、邏輯

聲明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