/**
* 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) {}
* };
*/
using namespace std;
class Solution {
public:
vector<int> postorderTraversal(TreeNode* root)
{
vector<int> arr;
stack<TreeNode*> stack; //初始化一个栈用来存储树的节点
TreeNode* p = root; //设置当前节点指针
TreeNode* pre = nullptr; //设置一个指针指向已经被访问过的节点
while(p != nullptr||!stack.empty())
{
if(p != nullptr) //一直向左
{
stack.push(p);
p = p->left;
}
else //当访问到最左下角的元素后转向其根节点的右边访问右子树
{
p = stack.top(); //令p指向栈顶元素
if(p->right!=nullptr&&p->right!=pre)//如果右节点不为空且未被访问
{
p = p->right; //转向右子树
stack.push(p); //右子树进栈
p = p->left; //将左子树设为当前节点
}
else //如果右子树已经被访问或者为空则弹出栈顶元素
{
stack.pop(); //栈顶元素出栈
arr.push_back(p->val); //将栈顶元素的值存入结果数组里面
pre = p; //记录最近访问过的节点
p = nullptr;
}//else
}//else
}//while
return arr;
}//vector
};
力扣刷题145:二叉树的后序遍历非递归实现
最新推荐文章于 2024-09-22 14:07:44 发布