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

牛群的最长距离

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

知识点:

二叉树/图的直径/DFS/BFS

分析:

这道题,可以看作是求二叉树的直径。当然,也可以求图的直径,二叉树就是边权为1的有向图。

求直径的时候,思路也很简单。

对于每一个点,求这个点x的最远的点u,再求距离u最远的点。这条路径就是最长的路径。

可以用DFS或者BFS来求/// BFS不易爆栈,推荐用BFS,答案实例使用DFS。

编程语言:

完整代码:

class Solution {
  public:
    int ans = 0;
    int dfs(TreeNode* u, TreeNode* father) {
        int dist = 0;
        int d1 = 0, d2 = 0;
        if (u->left) {
            int j = u->left->val;
            int d = dfs(u->left, u) + 1;
            dist = max(d, dist);
            if (d > d1) d2 = d1, d1 = d;
            else if (d > d2) d2 = d;
        }
        if (u->right) {
            int j = u->right->val;
            int d = dfs(u->right, u) + 1;
            dist = max(d, dist);
            if (d > d1) d2 = d1, d1 = d;
            else if (d > d2) d2 = d;
        }

        ans = max(ans, d1 + d2);
        return dist;
    }
    int diameterOfBinaryTree(TreeNode* root) {
        if(root == nullptr) return 0;
        if(!root->left && !root->right) return 0;
        dfs(root, nullptr);
        return ans;
    }
};

全部评论

相关推荐

10-24 11:10
山西大学 Java
若梦难了:哥们,面试挂是很正常的。我大中厂终面挂,加起来快10次了,继续努力吧。
点赞 评论 收藏
分享
10-30 23:23
已编辑
中山大学 Web前端
去B座二楼砸水泥地:这无论是个人素质还是专业素质都👇拉满了吧
点赞 评论 收藏
分享
点赞 1 评论
分享
牛客网
牛客企业服务