讲讲对于后序遍历的理解,并通过题目加深理解。
核心
后序遍历的顺序为左右中,在一棵二叉树中,可视为从左底部的叶子节点最终到根节点,是一种由下至上的遍历方式。
题目皆为LeeCode
’
正题:怎么真正理解通透后序遍历呢?
1.先把后序遍历二叉树基本流程脑中过10遍(三层就好)
2.将“由下至上的遍历方式”这句话融入到脑中的遍历里
3.看题目,理解每一题的后序遍历共同点和区别,流程想通了
基础实现方式
1.递归
void traversal(TreeNode* cur, vector<int>& vec) {
if (cur == NULL) return;
traversal(cur->left, vec); // 左
traversal(cur->right, vec); // 右
vec.push_back(cur->val); // 中
}
2.栈
class Solution {
public:
vector<int> postorderTraversal(TreeNode* root) {
vector<int> result;
stack<TreeNode*> st;
if (root != NULL) st.push(root);
while (!st.empty()) {
TreeNode* node = st.top();
if (node != NULL) {
st.pop();
st.push(node); // 中
st.push(NULL);
if (node->right)