栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

每日一题:二叉树节点的最大距离问题

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

每日一题:二叉树节点的最大距离问题

题目:从二叉树的节点a出发,可以向上或向下走,但沿途的节点只能经过一次,到达节点b时路径上的节点个数叫做a到b的距离,那么二叉树上任何两个节点都有距离,求整棵树上的最大距离。 思路:假设x为头节点,分两种情况:dd

1:不经过x,则 ①:左孩子上有最大距离 ②:右孩子上有最大距离
2:经过x,则最大距离为:左树高 + 1 + 右树高

代码:

public static class Node {
    public int value;
    public Node left;
    public Node right;
    public Node(int value) {
        this.value = value;
    }
}

public static int maxDistance (Node head) {
    return process(head).maxDistance;    
}

public static class Info {
    public int maxDistance;
    public int height;
    public Info (int dis, int h) {
        this.maxDistance = dis;
        this.height = h;
    }
}

//返回以x为头节点的树的最大距离和最大高度
public static Info process(Node x) {
    if (x == null) {
        return new Info(0,0);
    }
    Info leftInfo = process(x.left);
    Info rightInfo = process(x.right);
    int p1 = leftInfo.maxDistance;
    int p2 = rightInfo.maxDistance;
    int p3 = leftInfo.height + 1 + rightInfo.height;
    int maxDistance = Math.max(p3, Math.max(p1, p2));
    int height = Math.max(leftInfo.height, rightInfo.height) + 1;
    return new Info(maxDistance, height);
}
//测试
public static void String(String[] args) {
    Node head1 = new Node(1);
    head1.left = new Node(2);
    head1.right = new Node(3);
    head1.left.left = new Node(4);
    head1.left.right = new Node(5);
    head1.right.left = new Node(6);
    head1.right.right = new Node(7);
    head1.left.left.left = new Node(8);
    head1.right.left.right = new Node(9);
    //返回以head1为头节点的树的最大距离
    System.out.println(maxDistance(head1));
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/997652.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号