【力扣 003】145. 二叉树的后序遍历
45. 二叉树的后序遍历
后续遍历顺序:
- 后序遍历其左子树;
- 后序遍历其右子树;
- 访问根结点。
解法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> nums;
if (!root)
return nums;
stack<TreeNode*> s;
TreeNode *p;
s.push(root);
p = root->left;
while (!s.empty())
{
while (p != nullptr)
{
s.push(p);
p = p->left;
}
bool flag = true;
p = nullptr;
while (!s.empty() && flag)
{
root = s.top();
if (root->right == p)
{
s.pop();
nums.push_back(root->val);
p = root;
}
else
{
flag = false;
p = root->right;
}
}
}
return nums;
}
};