Tree Preorder, Inorder, and Postorder Iteratively Summarization

来源:互联网 发布:七天网络网页版 编辑:程序博客网 时间:2024/06/05 05:41

https://discuss.leetcode.com/topic/30632/preorder-inorder-and-postorder-iteratively-summarization


PRE ORDER TRAVERSE



public List<Integer> preorderTraversal(TreeNode root) {    List<Integer> result = new ArrayList<>();    Deque<TreeNode> stack = new ArrayDeque<>();    TreeNode p = root;    while(!stack.isEmpty() || p != null) {        if(p != null) {            stack.push(p);            result.add(p.val);  // Add before going to children            p = p.left;        } else {            TreeNode node = stack.pop();            p = node.right;           }    }    return result;}



IN ORDER TRAVERSE



public List<Integer> inorderTraversal(TreeNode root) {    List<Integer> result = new ArrayList<>();    Deque<TreeNode> stack = new ArrayDeque<>();    TreeNode p = root;    while(!stack.isEmpty() || p != null) {        if(p != null) {            stack.push(p);            p = p.left;        } else {            TreeNode node = stack.pop();            result.add(node.val);  // Add after all left children            p = node.right;           }    }    return result;}



POST ORDER TRAVERSE



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
原创粉丝点击