LeetCode 145 二叉樹的後序遍歷

2021-09-11 07:57:30 字數 816 閱讀 7962

題目:

給定乙個二叉樹,返回它的 後序 遍歷。

示例:

輸入:[1,null,2,3]  1\

2/

3輸出:[3,2,1]

高階:遞迴演算法很簡單,你可以通過迭代演算法完成嗎?

思路:等同於144題來思考,但是棧的操作要做些許的變化。

根據後序遍歷的「左右中」順序,中間節點應當先入棧,然後考慮中間節點是否包含的子節點,如果有子節點,則先入棧右子節點,再入棧左子節點;如果中間節點不包含子節點(葉節點),則直接pop出該節點,並將該節點的val寫入結果中。

但是直接這樣做會遇到乙個問題,如示例中所給的二叉樹,當迭代到最後一層時,我們的棧中從底到頂應當依次是:1,2,3。那麼首先判斷最頂的值:3。該節點為葉子節點,直接將3列印出來並將其pop掉。下一次迭代的節點為2,如果按照上方的思路,這時候會判斷2是否具有子節點,那麼這時會回到構建整個棧的所經歷的步驟,即陷入了乙個死迴圈,因為原本2的左子節點剛剛已經遍歷過一次了,但是演算法上並沒有進行判斷,因此原本的思路會繼續將3壓入棧中。

因此我們需要增加乙個新的變數pre,pre的作用是記錄演算法上一次處理的節點,如果上一次處理的節點是當前處理的節點的子節點,那麼必然可以斷定,當前節點的兩個子節點都已經遍歷完畢,那麼直接將當前節點彈出並列印即可。

**:

class solution  else 

}else

pre = temp;

}return result;

}}

LeetCode 145 二叉樹的後序遍歷

1.題目 2.解答 2.1.遞迴法 定義乙個存放樹中資料的向量 data,從根節點開始,如果節點不為空,那麼 definition for a binary tree node.struct treenode class solution vector temp if root null retur...

leetcode145 二叉樹的後序遍歷

給定乙個二叉樹,返回它的 後序 遍歷。示例 輸入 1 null,2,3 1 2 3 輸出 3,2,1 高階 遞迴演算法很簡單,你可以通過迭代演算法完成嗎?方法一 思想 說明 這裡需要標記該節點的右子樹是否訪問,設定pre指向當前節點,curr指向剛剛出棧的節點 definition for a bi...

LeetCode145 二叉樹的後序遍歷

給定乙個二叉樹,返回它的 後序 遍歷。示例 輸入 1,null,2,3 1 2 3輸出 3,2,1 高階 遞迴演算法很簡單,你可以通過迭代演算法完成嗎?思路 後序遍歷和前序遍歷比較相似,區別在於新增元素的順序有所不同,前序遍歷是向後新增結點元素,後序遍歷是向前新增,所以對比前序遍歷演算法只需要修改一...