Tree111MinimumDepthOfBinaryTree

来源:互联网 发布:淘宝c店装修尺寸 编辑:程序博客网 时间:2024/05/17 01:49

思路

  • 用recursive,但要注意审题,详见“注意”
  • 用Iterative DFS
  • 用Iterative BFS。其中BFS相比于DFS有个可以简化的地方。并且可以只用一个queue和一个while循环。想不起来请看Tricks2

注意

  • 根据题目要求,一定要到了leaf才算,因此root比较特殊
  • ArrayList does not implement Queue, but we can use LinkedListor ArrayDeque instead. and ArrayDeque is faster.

Tricks

1. 找最大值最小值问题的初始值

  • Deal with the first depth as minDepth. See minDepthByBFS()
  • 最小值和最大值略不同。找最大值的时候随便初始化一个0中就会被代替,但是最小值只能找第一个有效值来赋值,只能初始化一个无效值。
  • 上述的逻辑有问题。他们都必须初始化一个无效值,或者一个小于所有possibilites的值。只不过maximum比较好找,因为tree的个数最小为0.但minimum不好找,因为tree并没有个数的峰值。
  • 因此minimum应该不赋值,找到第一个有效值的时候加以判断是否初始化,没有初始化则赋值。
  • 如果minimum必须初始化,则是个永远不会出现的数比如-1或者null作为‘有待赋值’的标志

2. BFS相比于DFS可以简化的地方

https://discuss.leetcode.com/topic/1948/my-solution-used-level-order-traversal

  • 思路:
  • 因为depth变成了常量,因此只能每一层traverse一遍后加1
  • 而判断level结束,除了之前获取的本层size() 以外还有一个方法,就是设一个特殊值在每个level后面。这样每当==特殊值,并且queue里面还有别的tn,说明本层结束,下一层待traverse。就depth++
  • level-order traversal and record current level depth, when meet a node which both child is null then return, no need to go farther再次是因为从左到右按顺序,遇到的第一个左右子树为空的节点必定为minimumDepth,因此直接return就可以了,不需要往下进行。
  • 细节处理请看Tree111的maxDepthByBFS()
0 0