二叉樹的先序遍歷(非遞迴演算法)
阿新 • • 發佈:2019-02-10
思路一:主要思想就是先將根結點壓入棧,然後根結點出棧並訪問根結點,而後依次將根結點的右孩子、左孩子入棧,直到棧為空為止。
思路二:訪問結點,結點壓棧,訪問左結點,左子樹訪問結束回退到父結點,訪問右子樹。結點出棧表示該結點的左子樹已訪問完。void PreOrder2(BTree T) { if(!T) return; LinkStack s; InitStack(&s); Push(&s,T); for(;;) { BTree ptr = NULL; ptr = Top(s); cout<<"Node : "<<ptr->data<<endl; Pop(&s,&ptr); if(ptr->rChild) Push(&s,ptr->rChild); if(ptr->lChild) Push(&s,ptr->lChild); if(Isempty(s)) break; } Destroy(&s); }
程式碼:
void PreOrder3(BTree T) { LinkStack s; InitStack(&s); while(T || !(Isempty(s))) { if (T) { cout<<"Node : "<<T->data<<endl; Push(&s,T); T = T->lChild; } else { Pop(&s,&T); T = T->rChild; } } Destroy(&s); }