1. 題目
2. 解答
2.1. 遞迴法
定義乙個存放樹中資料的向量 data,從根節點開始,如果節點不為空,那麼
/**
* definition for a binary tree node.
* struct treenode
* };
*/class
solution ;
vector
temp = {};
if (root != null)
return data;
}};複製**
2.2. 迭代法一仿照前序遍歷的思想,只不過這次我們的順序為中-右-左,然後倒序將其加入到向量中,即為後序左-右-中的結果。定義乙個存放樹中節點的棧 node_stack 和存放資料的向量 data,從根節點開始,如果節點不為空或者棧非空,迴圈以下過程:
/**
* definition for a binary tree node.
* struct treenode
* };
*/class
solution ;
stack
node_stack;
treenode* temp = root;
while (temp || !node_stack.empty())
// 若最後乙個節點沒有左子節點,棧為空
if (!node_stack.empty()) // 棧非空
}return data;
}};複製**
2.3. 迭代法二後序遍歷的話只有某一節點的左右子節點都被訪問過之後才能訪問該節點。定義乙個存放樹中節點的棧 node_stack 和存放資料的向量 data,如果樹非空,先將根節點壓入棧。
當前節點為棧頂節點
/**
* definition for a binary tree node.
* struct treenode
* };
*/class
solution ;
stack
node_stack;
if (root) node_stack.push(root); // 樹非空,先將根節點壓入棧
treenode* cur = root; // 當前節點
treenode* last = null; // 上一次訪問的節點
while (!node_stack.empty())
else
}return data;
}};複製**
參考資料 LeetCode 145 二叉樹的後序遍歷
題目 給定乙個二叉樹,返回它的 後序 遍歷。示例 輸入 1,null,2,3 1 2 3輸出 3,2,1 高階 遞迴演算法很簡單,你可以通過迭代演算法完成嗎?思路 等同於144題來思考,但是棧的操作要做些許的變化。根據後序遍歷的 左右中 順序,中間節點應當先入棧,然後考慮中間節點是否包含的子節點,如...
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 高階 遞迴演算法很簡單,你可以通過迭代演算法完成嗎?思路 後序遍歷和前序遍歷比較相似,區別在於新增元素的順序有所不同,前序遍歷是向後新增結點元素,後序遍歷是向前新增,所以對比前序遍歷演算法只需要修改一...