145. Binary Tree Postorder Traversal 树后续遍历 flag方法和reverse方法

来源:互联网 发布:问答系统源码 编辑:程序博客网 时间:2024/06/05 10:17
/** * 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> ans;        stack<TreeNode*> s;        TreeNode* cur = root;        TreeNode* last = NULL;        while(cur || !s.empty()){            if(cur){                s.push(cur);                cur = cur->left;            }else{                TreeNode* topNode = s.top();                if(topNode->right && last != topNode->right){//栈顶节点有右子树,且右子树没被访问过                    cur = topNode->right;                    //s.push(cur); 这个地方就不要push了                }else{                    ans.push_back(topNode->val);                    last = topNode;                    s.pop();                }            }        }        return ans;    }};

reverse方法:

public List<Integer> postorderTraversal(TreeNode root) {    LinkedList<Integer> result = new LinkedList<>();    Deque<TreeNode> stack = new ArrayDeque<>();    TreeNode p = root;    while(!stack.isEmpty() || p != null) {        if(p != null) {            stack.push(p);            result.addFirst(p.val);  // Reverse the process of preorder            p = p.right;             // Reverse the process of preorder        } else {            TreeNode node = stack.pop();            p = node.left;           // Reverse the process of preorder        }    }    return result;}

0 0
原创粉丝点击