二叉树的直径
(牛客网—牛客题霸算法篇—NC)
题目描述
给定一颗二叉树,求二叉树的直径。
1.该题的直径定义为:树上任意两个节点路径长度的最大值
2.该题路径长度定义为:不需要从根节点开始,也不需要在叶子节点结束,也不需要必须从父节点到子节点,一个节点到底另外一个节点走的边的数目
3.这个路径可能穿过根节点,也可能不穿过
4.树为空时,返回 0
思路
Java实现
这题可以看作是求二叉树深度的变形。
定义一个全局变量res,用于存储当前的最大直径。
使用递归以此计算左右子树的深度,将深度之和与res比较,将较大的值存入res。
代码实现
import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* public TreeNode(int val) {
* this.val = val;
* }
* }
*/
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;
}
}
这篇文章介绍了如何利用递归方法求解二叉树的直径问题,通过计算每个节点左右子树深度之和并更新全局最大直径。关键在于理解路径定义和深度计算,适用于Java实现。
&spm=1001.2101.3001.5002&articleId=121666841&d=1&t=3&u=45a4dd8add7e48d6867d3049adc2c90f)
1万+

被折叠的 条评论
为什么被折叠?



