20200310

@liwei

Plan

  • LeetCode 45mins 实际1小时

Notes

LeetCode 543. 二叉树的直径

核心思想

  1. 对根节点,获取左子树深度ld
  2. 对根节点,获取右子树深度rd
  3. 将ld + rd作为这个节点作为根节点时,可以获得的最大直径
  4. 同样方法获取左右节点的最大直径,取最大值

实际编码

我的实现方式为两层递归,最外层递归,用于dfs搜索整个树,在每个节点上用递归获取左右子树的深度。

然而,看答案中,解法明显更好,具体的改进为:

  1. 设定一个全局变量用于记录以其为根的最大宽度
  2. 在计算深度的递归函数中,没到一个节点,刷新全局变量

很简单的算法时间复杂度就从 N^2 变成了 N。

More

熟能生巧