Tree Traversal

1

/ \

2 3

/ \

4 5

DFS

Time: O(n); Space: stack: O(n)

把左节点和右节点的位置固定不动,那么根节点放在左节点的左边,称为前序(pre-order)

public ArrayList<Integer> traversal(Node root) {
    ArrayList<Integer> list = new ArrayList<>();
    if (root == null) return list;
    return preOrderHelper(root, list);
}

public ArrayList<Integer> preOrderHelper(Node node, ArrayList<Integer> list) {
    if (node != null) {
        list.add(node.val);
        preOrderHelper(node.left, list); 
        preOrderHelper(node.right, list); 
    }
    return list;
}   

根节点放在左节点和右节点的中间,称为中序(in-order)

根节点放在右节点的右边,称为后序(post-order)

BFS

For example: Given binary tree [3,9,20,null,null,15,7],

return its level order traversal as:

1。 方法1:iterative bfs - queue 先进先出

2。 方法2: recursive dfs

For example: Given binary tree [3,9,20,null,null,15,7],

return its bottom-up level order traversal as:

My Solutions:

  1. iterative: 和level order类似,但level加入list时,用 list.add(0, level), 或者最后reverse list

  2. recursive:和level order类似,但在helper里,把 new LinkedList<>() 加入list时,用 list.add(0, new LinkedList<Integer>()), 或者最后 Collection.reverse(list)

For example: Given binary tree [3,9,20,null,null,15,7],

return its zigzag level order traversal as:

My Solutions:

iterative: 和level order 类似,但多用一个height 记录高度,并且反向加入元素

recursive:和level order类似,但在helper里,多一个判断条件

Last updated