binary-tree-postorder-traversa题解

binary-tree-postorder-traversal

http://www.nowcoder.com/questionTerminal/32af374b322342b68460e6fd2641dd1b

我的方法是使用一个栈,由于后序遍历,因此先将右节点入栈,再将左节点入栈;然后每次判断栈顶元素,如果栈顶元素是叶子节点,则说明它要么是左节点,要么是右节点;这时候就需要判断栈顶元素的前一个元素是否为栈顶节点的爸,如果是栈顶节点的爸的话,就需要连带着他爸一起弹出;而如果是左节点的话,只需弹出他自己即可。
class Solution {
public:
    vector<int> postorderTraversal(TreeNode *root) {
        vector<int> result;
        if(!root) return result;
        stack<TreeNode *> s;
        s.push(root);
        while(!s.empty()){
            TreeNode * temp = s.top();
            if(!temp->left && !temp->right){
                result.push_back(temp->val);
                s.pop();
                TreeNode *t = s.top();
                while(!s.empty() && (t->left || t->right) && (t->left == temp || t->right == temp)){
                    temp = t;
                    result.push_back(t->val);
                    s.pop();
                    t = s.top();
                }
            }
            else{
                if(temp -> right) s.push(temp->right);
                if(temp -> left) s.push(temp->left);
            }
        }
        return result;
    }
};


全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务