Traversal

Binary Tree Preorder Traversal

  • Time: O(N)
  • Space: O(1)
// Binary Tree Preorder Traversal Recursive
public List<Integer> preorderTraversal(TreeNode root) {
    List<Integer> ret = new ArrayList<>();
    preorderTraversal(root, ret);
    return ret;
}

private void preorderTraversal(TreeNode node, List<Integer> list) {
    if (node == null) {
        return;
    }
    list.add(node.val);
    preorderTraversal(node.left, list);
    preorderTraversal(node.right, list);
}

// Binary Tree Preorder Traversal Iterate
public List<Integer> preorderTraversal_2(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);
            p = p.left;
        } else {
            TreeNode node = stack.pop();
            p = node.right;
        }
    }
    return result;
}

// Binary Tree Inorder Traversal Recursive
public List<Integer> inorderTraversal(TreeNode root) {
    List<Integer> ret = new ArrayList<>();
    inorderTraversal(root, ret);
    return ret;
}
public void inorderTraversal(TreeNode node, List<Integer> list) {
    if (node == null) {
        return;
    }
    inorderTraversal(node.left, list);
    list.add(node.val);
    inorderTraversal(node.right, list);
}

// Binary Tree Inorder Traversal Iterate
public List<Integer> inorderTraversal_2(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);
            p = node.right;
        }
    }
    return result;
}

// Binary Tree Postorder Traversal Recursive
public List<Integer> postorderTraversal(TreeNode root) {
    List<Integer> ret = new ArrayList<>();
    postorderTraversal(root, ret);
    return ret;
}
public void postorderTraversal(TreeNode node, List<Integer> list) {
    if (node == null) {
        return;
    }
    postorderTraversal(node.left, list);
    postorderTraversal(node.right, list);
    list.add(node.val);
}

// Binary Tree Postorder Traversal Iterate
public List<Integer> postorderTraversal_2(TreeNode root) {
    LinkedList<Integer> result = new LinkedList<>();
    Stack<TreeNode> stack = new Stack<>();
    TreeNode p = root;
    while (!stack.isEmpty() || p != null) {
        if (p != null) {
            stack.push(p);
            result.addFirst(p.val);
            p = p.right;
        } else {
            TreeNode node = stack.pop();
            p = node.left;
        }
    }
    return result;
}

results matching ""

    No results matching ""