【力扣 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;
    }
};


 

posted @ 2021-11-10 21:23  苏格拉底的落泪  阅读(47)  评论(0编辑  收藏  举报