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

牛群的最长距离

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;
    }
};

全部评论

相关推荐

06-15 02:05
已编辑
南昌航空大学 数据分析师
Eason三木:你如果想干技术岗,那几个发公众号合唱比赛的经历就去掉,优秀团员去掉,求职没用。然后CET4这种不是奖项,是技能,放到下面的专业技能里或者单独列一个英语能力。 另外好好改改你的排版,首行缩进完全没有必要,行间距好好调调,别让字和标题背景黏在一起,你下面说能做高质量PPT你得展现出来啊,你这简历排版我用PPT做的都能比你做的好。 然后自我评价,你如果要干数据工程师,抗压能力强最起码得有吧。
简历中的项目经历要怎么写
点赞 评论 收藏
分享
05-14 20:34
门头沟学院 Java
窝补药贝八股:管他们,乱说,反正又不去,直接说680
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

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