题解 | #牛群的最长距离# java
牛群的最长距离
https://www.nowcoder.com/practice/82848c6aa1f74dd1b95d71f3c35c74d5
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 {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param root TreeNode类
* @return int整型
*/
public int diameterOfBinaryTree (TreeNode root) {
// write code here
int[] diameter = {0};
depth(root, diameter);
return diameter[0];
}
public int depth(TreeNode node, int[] diameter) {
if (node == null) {
return 0;
}
int left = depth(node.left, diameter);
int right = depth(node.right, diameter);
diameter[0] = Math.max(diameter[0], left + right);
return Math.max(left, right) + 1;
}
}
该Java代码所使用的语言是Java。
该题目考察的知识点是二叉树以及递归算法。题目要求计算二叉树的直径,即任意两个节点之间的最长路径的长度。
以下是对代码的文字解释:
定义 diameterOfBinaryTree 方法接收一个 TreeNode 类型的参数 root,并返回一个整型结果。
在 diameterOfBinaryTree 方法中,初始化一个长度为 1 的整型数组 diameter,用于存储最大直径。然后调用 depth 方法计算二叉树的深度,并将结果存入 diameter 数组中。最后,返回 diameter 数组中的元素,即二叉树的最大直径。在 depth 方法中,首先检查当前节点是否为空,如果是,则返回 0。然后递归计算左子树的深度,并将结果存入 left 变量中。再递归计算右子树的深度,并将结果存入 right 变量中。接着更新最大直径,将左子树深度和右子树深度之和与当前最大直径进行比较,并取较大值。最后返回左右子树深度的较大值加1,表示当前节点的深度。
