【數據結構】-樹-後序遍歷詳述-前中後序遍歷中棧的規律

1.訪問完b的左子樹後,回到b,此時不能訪問b

2.訪問完b的右子樹後,回到b,此時訪問b,訪問完b之後,將b歸空,只要b被訪問,說明它的左右子樹已經訪問結束,不需要再用了。如果沒有右子樹,直接訪問b。

那麼,如何判斷上面兩種情況?

第一:每個節點添加isfirst標記,初始化爲true,表示第一次出現在棧頂,也就是第一種情況,此時需要獲取右子,而不是訪問。

第二:添加一個指針指向上一個訪問的節點。如果右子等於上一個訪問的節點,或者右子爲空,那麼直接訪問b,否則,右子入棧。

關於後序遍歷棧的一個結論:

訪問:d

棧:a,b,d

 

訪問:g

棧:a b e g

 

訪問:e

棧:a,b

 

結論:訪問某個節點時,棧中的所有元素恰好是該節點的所有祖先(算法實現:https://blog.csdn.net/qq_39328436/article/details/106788087)。從棧底到棧頂剛好是根節點到該節點的路徑

利用這個性質可以求路徑,也可以求最近祖先節點

 

關於先序和中序遍歷棧的一個結論:

由於先序算法中,是先訪問該節點再入棧

中序算法中是,出棧該節點,再訪問。

所以先序對應入棧序列,中序對應出棧序列

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章