一条路径的长度为该路径经过的节点数减一,求直径就是求路径长度的最大值,等效于求路径经过的节点减一。假设我们知道对该节点的左儿子向下遍历的经过最多的节点为L,右儿子为R 那么经过的节点为L+R+1。算法流程为:我们定义一个递归函数 depth(node)计算节点最大值,,函数返回该节点为根的子树深度,递归调用该节点的左儿子和右二子,求得其子树的深度为L,R 。
子树的深度为左右俩儿子子树的max(L,R),
深度为max(L.R)+1。
递归搜索每个节点 设一个全局变量为ans 记录最大的值 最后返回ans-1 即为树的直径。
package leetcode;
public class demo22 {
int ans ;
public int diameterOfBinaryTree(TreeNode root