题解 | #牛群的最长距离#

牛群的最长距离

https://www.nowcoder.com/practice/82848c6aa1f74dd1b95d71f3c35c74d5

考察的知识点:二叉树的递归遍历;

解答方法分析:

  1. 首先,在diameterOfBinaryTree函数中,需要定义一个变量diameter用于记录最大路径长度,并初始化为0。
  2. 然后,在递归函数depth中,对当前节点进行处理:如果当前节点为空,返回0。否则,递归求解当前节点的左子树的高度和右子树的高度,并分别赋值给left和right。计算当前节点为根节点时的路径长度,即左子树高度和右子树高度之和,并将其与diameter比较,更新diameter的值。返回以当前节点为根节点的子树的最大高度,即左子树高度和右子树高度的较大值加1。
  3. 最后,在主函数中调用depth函数,并返回最大路径长度diameter

所用编程语言:C++;

完整编程代码:↓

/**
 * struct TreeNode {
 *  int val;
 *  struct TreeNode *left;
 *  struct TreeNode *right;
 *  TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 * };
 */
class Solution {
  public:
    int diameterOfBinaryTree(TreeNode* root) {
        int diameter = 0;
        depth(root, diameter);
        return diameter;
    }

    int depth(TreeNode* node, int& diameter) {
        if (!node) {
            return 0;
        }

        int left = depth(node->left, diameter);
        int right = depth(node->right, diameter);

        diameter = max(diameter, left + right);

        return max(left, right) + 1;
    }
};

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-23 14:18
点赞 评论 收藏
分享
程序员小白条:你是沟通了900个,不是投了900份简历,你能投900份,意味着对面都要回复你900次,你早就找到实习了,没亮点就是这样的,别局限地区,时间投的也要早,现在都要7月了
点赞 评论 收藏
分享
机械打工仔:有说的你怀疑一下就行了,直接问也太实诚了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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