给你二叉树的根节点 root ,返回它节点值的 后序 遍历。
学习点
迭代法与前序遍历顺序部分相反,前序为 中左右,倒序后为 右左中,则在前序遍历入栈的顺序改为先入左子树后入右子树即可。
代码
递归法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 class Solution { public : void postOrder (TreeNode *root, vector<int > &res) { if (root == nullptr ) return ; postOrder (root->left, res); postOrder (root->right, res); res.push_back (root->val); } vector<int > postorderTraversal (TreeNode *root) { vector<int > res; postOrder (root, res); return res; } };
迭代法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 class Solution { public : void postOrder (TreeNode *root, vector<int > &res) { if (root == nullptr ) return ; postOrder (root->left, res); postOrder (root->right, res); res.push_back (root->val); } vector<int > postorderTraversal (TreeNode *root) { vector<int > res; stack<TreeNode*> st; if (root == nullptr ) return ; st.push (root); while (!st.empty ()) { auto p = st.top (); st.pop (); res.push_back (p->val); if (p->left) st.push (p->left); if (p->right) st.push (p->right); } reverse (res.begin (), res.end ()); return res; } };