Tree Traversal - level order

102. Binary Tree Level Order Traversal
103. Binary Tree Zigzag Level Order Traversal
107. Binary Tree Level Order Traversal II

  • 这两道题既可以用bfs也可以用dfs
  • 对于102,注意使用dfs的时候进入一个更深的depth,要给res新加一个ArrayList
  • 对于103,注意zigzag的顺序,在bfs中可以用一个variable判断方向。在dfs中可以用depth判断方向。从右向左加注意使用LinkedList,addFirst是O(1)操作。
  • 对于107,最底层的level是第一项,这道题标记为简单,其实用好的方法做也不简单,值得仔细研究。可以按102的方法做再Collections.reverse()。可以两次dfs,第一次先求出最大depth(res的size),第二次第i层在res中的位置是res.size() - 1 - i。最好的方法是一次dfs或bfs,但要用到LinkedList。
List temp = new LinkedList<>();         //注意没有addFirst方法
List> res = new LinkedList<>();    //107在第一层使用LinkedList

230. Kth Smallest Element in a BST

  • inorder traversal 一个bst,得到的就是从小到大的顺序
  • What if the BST is modified (insert/delete operations) often and you need to find the kth smallest frequently? How would you optimize the kthSmallest routine?
class Solution {
    int res = 0, count = 0;
    public int kthSmallest(TreeNode root, int k) {
        inorder(root, k);
        return res;
    }
    private void inorder(TreeNode root, int k) {
        if (root == null) {
            return;
        }
        inorder(root.left, k);
        count++;
        if (count == k) {
            res = root.val;
            return;
        }
        inorder(root.right, k);
    }
}
  • inorder traversal的复杂度是多少 O(n)
  • 新的方法的复杂度是多少 O(h)
  • 更改TreeNode的结构,增加count,count = all nodes of current node left and right subtree

你可能感兴趣的:(Tree Traversal - level order)