题解 | #牛群的最长距离# 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,表示当前节点的深度。

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务