leetcode 543 二叉树的直径
解题思路:题中直径就是找出最长路径。假设我们知道对于该节点的左儿子向下遍历经过最多的节点数 L(即以左儿子为根的子树的深度) 和其右儿子向下遍历经过最多的节点数 R(即以右儿子为根的子树的深度),那么以该节点为起点的路径经过节点数的最大值即为 L+R+1 。
我们记节点 node 为起点的路径经过节点数的最大值为 dnode,那么二叉树的直径就是所有节点 dnode的最大值减一。
最后的算法流程为:我们定义一个递归函数 depth(node) 计算 dnode,函数返回该节点为根的子树的深度。先递归调用左儿子和右儿子求得它们为根的子树的深度 L 和 R ,则该节点为根的子树的深度即为Max(L,R)+1
递归搜索时定义一个全局变量ans来保存dnode的最大值,最后返回 ans-1 即为树的直径。