/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<int> postorderTraversal(TreeNode* root) {
if (root == NULL)
return {};
// 后续遍历顺序:左 - 右 - 中
// 如果做先序遍历的镜像版本:中 - 右 - 左
// 再逆向输出镜像遍历结果
// 即得到后续遍历
// 存放先序遍历的镜像版本
vector<int> visit;
TreeNode *point = root;
vector<TreeNode*> nodes;
while (!nodes.empty() || point != NULL) {
// 访问point
visit.push_back(point->val);
// 如果point既有左孩子,又有有孩子,则将point放入nodes中,等待再次访问时取出它的左孩子
// 并且先访问右孩子
if (point->left != NULL && point->right != NULL) {
nodes.push_back(point);
面试常见算法之二叉树后续遍历(反向输出前序遍历的镜像版本)
最新推荐文章于 2023-01-12 09:30:00 发布
本文详细探讨了面试中常见的算法问题——如何通过反向输出前序遍历实现二叉树的后续遍历。通过对二叉树遍历概念的解析,结合实例讲解了这一独特遍历方式的实现逻辑,帮助读者深入理解二叉树操作技巧。
摘要由CSDN通过智能技术生成