LeetCode 145. 二叉树的后序遍历 (用栈实现后序遍历二叉树的非递归算法)
题目链接:https://leetcode-cn.com/problems/binary-tree-postorder-traversal/
给定一个二叉树,返回它的 后序 遍历。
示例:
输入: [1,null,2,3]
1
\
2
/
3
输出: [3,2,1]
进阶: 递归算法很简单,你可以通过迭代算法完成吗?
/** * 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) { vector<int> result; if(root==nullptr) return result; stack<TreeNode*> s; TreeNode *p=root,*r=nullptr; while(p||!s.empty()){ if(p){ s.push(p); p=p->left; }else{ p=s.top(); if(p->right&&p->right!=r){ p=p->right; }else{ s.pop(); result.push_back(p->val); r=p; p=nullptr; } // if(p->right==nullptr||p->right==r){ // s.pop(); // result.push_back(p->val); // r=p; // p=nullptr; // }else{ // p=p->right; // } } } return result; } };