题目描述
给定一个二叉树的根节点 root,返回它的 后序遍历。后序遍历的定义为:按照「左子树 → 右子树 → 根节点」的顺序遍历二叉树的所有节点。
提示:树中节点数目在范围 [0, 100] 内 -100 <= Node.val <= 100
进阶:递归算法很简单,你可以通过迭代算法完成吗?
示例 1:输入:root = [1,null,2,3] 输出:[3,2,1] 解释:
后序遍历顺序:3(左子树)→ 2(右子树)→ 1(根节点)
示例 2:输入:root = [] 输出:[]
示例 3:输入:root = [1] 输出:[1]
一、问题引入:为什么迭代法比递归更难?
递归的简洁性与局限性
后序遍历的递归实现极其简单,核心逻辑贴合定义:
#include <vector>
using namespace std;
// 二叉树节点结构体定义
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
// 三种构造函数(适配不同节点创建场景)
TreeNode() : val(0), left(nullptr), right(nullptr) {}
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
};
class Solution {
public:
// 主函数:对外暴露的接口,返回后序遍历结果
vector<int> postorderTraversal(TreeNode* root) {
vector<> res;
(root, res);
res;
}
:
{
(!root) ;
(root->left, res);
(root->right, res);
res.(root->val);
}
};
{
TreeNode* root = ();
root->right = ();
root->right->left = ();
Solution sol;
vector<> result = sol.(root);
cout << ;
( val : result) {
cout << val << ;
}
cout << endl;
root->right->left;
root->right;
root;
;
}

