(牛客网—牛客题霸算法篇—NC)
题目描述给定一颗二叉树,求二叉树的直径。
1.该题的直径定义为:树上任意两个节点路径长度的最大值
2.该题路径长度定义为:不需要从根节点开始,也不需要在叶子节点结束,也不需要必须从父节点到子节点,一个节点到底另外一个节点走的边的数目
3.这个路径可能穿过根节点,也可能不穿过
4.树为空时,返回 0
Java实现
这题可以看作是求二叉树深度的变形。
定义一个全局变量res,用于存储当前的最大直径。
使用递归以此计算左右子树的深度,将深度之和与res比较,将较大的值存入res。
代码实现import java.util.*;
public class Solution {
int res=0;//记录最大直径
public int diameterOfBinaryTree (TreeNode root) {
// write code here
dfs(root);
// return res;
}
public int dfs(TreeNode root){//找最大深度
if(root==null)
return 0;
int left=dfs(root.left);
int right=dfs(root.right);
res=Math.max(res,left+right);
return Math.max(left,right)+1;
}
}



