二叉树非递归后序遍历

二叉树非递归后序遍历java

 

    vector<int> post_order(TreeNode* root)
    {
        stack<TreeNode*> stack;
        vector<int> res;
        
        if(root == nullptr)
            return res;
        TreeNode* prev = nullptr;    
        TreeNode* curt = nullptr;
        
        stack.push(root);
        while(!stack.empty())
        {
            curt = stack.top();
            if(prev == nullptr || prev->left == curt || prev->right == curt)
            {
                if(curt->left != nullptr)
                    stack.push(curt->left);
                else if(curt->right != nullptr)
                    stack.push(curt->right);
                else{                     
                     stack.pop();
                      res.push_back(curt->val);
                }
            } else if(curt->left == prev)
            {
                if(curt->right != nullptr)
                    stack.push(curt->right);
                else{                     
                     stack.pop();
                      res.push_back(curt->val);
                }
            }else {
                res.push_back(curt->val);
                stack.pop();
            }
            prev = curt;
        }
        
        return res;
    }