难度:【简单】
- 定义:在一个二叉树中,任意两个节点之间的路径中最长的路径的长度称为其直径。路径长度由两个节点之间经过的“边”表示,而不是节点数。且二叉树的直径不一定经过根节点。
- 先大致看了官方解法,不理解,心情暴躁没看懂,就自己瞎写。
- 起初不理解直径不一定经过根节点。根据示例,只简单将root的左右子树的层数相加(仅对根节点计算,显然是错误的),部分用例没过,就是没考虑不经过根节点的情况。其实不经过根节点的情况不难构造,某个子节点的左右子树高度超过根节点的左(或右)子树的高度即可。
- 根据不经过根节点的二叉树特点,调整算法,对每个节点按上面算法计算一遍,返回最大值。时间复杂度O(nlogn),空间复杂度O(n),复杂度不如官方的好。
- 需要优化(todo)