代码解决
/** * Definition for a binary tree node. * 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: // 递归遍历函数,用于后序遍历 void traversal(TreeNode* tree, vector<int>& res) { if(tree == NULL) return; // 如果节点为空,则直接返回 traversal(tree->left, res); // 递归遍历左子树 traversal(tree->right, res); // 递归遍历右子树 res.push_back(tree->val); // 访问根节点,将节点值加入结果向量 } // 后序遍历的主函数 vector<int> postorderTraversal(TreeNode* root) { vector<int> result; // 存储遍历结果的向量 traversal(root, result); // 调用递归函数进行后序遍历 return result; // 返回结果向量 } };
详细解释
TreeNode 结构体:
- 定义了一个二叉树节点结构体
TreeNode
,包括节点的值val
,左子节点指针left
,和右子节点指针right
。- 提供了三种构造函数:
- 默认构造函数初始化节点值为0,左右子节点为空。
- 带一个整数参数的构造函数初始化节点值为给定值,左右子节点为空。
- 带一个整数和两个子节点参数的构造函数初始化节点值和左右子节点。
Solution 类:
- 包含后序遍历二叉树的实现。
traversal 函数:
- 这是一个递归函数,用于执行后序遍历。
- 参数
tree
是当前节点,res
是存储遍历结果的向量。- 首先检查当前节点是否为空,如果为空,则返回。
- 递归遍历左子树和右子树。
- 最后将当前节点的值加入结果向量。
postorderTraversal 函数:
- 这是后序遍历的主函数。
- 创建一个空的结果向量
result
。- 调用递归函数
traversal
从根节点开始进行后序遍历。- 最后返回结果向量。
使用场景
后序遍历常用于:
- 删除或释放二叉树
- 后序表达式的求值
- 计算二叉树的高度