1. 程式人生 > >資料結構--二叉樹--輸出樹中從根到每個葉子節點的路徑(樹遍歷演算法的應用) .

資料結構--二叉樹--輸出樹中從根到每個葉子節點的路徑(樹遍歷演算法的應用) .

void AllPath(Bitree T, Stack &S)//輸出二叉樹上從根到所有葉子結點的路徑
{
  if(T)
  {
    Push(S,T->data);
    if(!T->Left&&!T->Right)//如果左指標和右指標同時為空,才說明該節點為葉子節點
    PrintStack(S);
    else
    {
      AllPath(T->Left,S);
      AllPath(T->Right,S);
    }
    Pop(S);
  }
}

而樹組成的二叉連結串列,只要節點的左指標為空,就說明該節點為葉子節點。其實右指標在實際的樹中為其兄弟節點,已經為空了,如下圖所示,紅色為實際的樹,藍色為樹轉成的二叉連結串列。

 

void OutPath(Bitree T, Stack &S)//輸出森林從根到所有葉子結點的路徑
{
  while(!T)
  {//要輸出從根到葉子節點的路徑,實質上輸出從根節點開始往左加上左子樹根到葉子節點的路徑。
    Push(S,T->data);
    if(!T->lchild)//
      Printstack(S);
    else    
      OutPath(T->lchild,S);      
      Pop(S);
      T=T->rchild;//T一直往右走
  }
}