直径问题 Diameter Problems

Posted hyserendipity

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了直径问题 Diameter Problems相关的知识,希望对你有一定的参考价值。

2019-11-03 21:37:59

一、Diameter of Binary Tree

问题描述:

技术图片

 

 

问题求解:

解法一、第一反应是树上动归,每个节点保存一下左右的最大深度,最后以每个节点作为中枢计算最大的长度即可。

    public int diameterOfBinaryTree(TreeNode root) {
        Map<TreeNode, int[]> map = new HashMap<>();
        dfs(root, map);
        int res = 0;
        for (TreeNode key : map.keySet()) {
            res = Math.max(res, map.get(key)[0] + map.get(key)[1]);
        }
        return res;
    }
    
    private int[] dfs(TreeNode root, Map<TreeNode, int[]> map) {
        if (root == null) return new int[]{-1, -1};
        int[] l = dfs(root.left, map);
        int[] r = dfs(root.right, map);
        map.put(root, new int[]{Math.max(l[0], l[1]) + 1, Math.max(r[0], r[1]) + 1});
        return map.get(root);
    }

解法二、不求直径,而是转求每个节点的最大深度,遍历的时候可以顺便得到直径。

    public int diameterOfBinaryTree(TreeNode root) {
        int[] res = new int[1];
        helper(root, res);
        return res[0];
    }
    
    private int helper(TreeNode root, int[] res) {
        if (root == null) return 0;
        int l = helper(root.left, res);
        int r = helper(root.right, res);
        res[0] = Math.max(res[0], l + r);
        return Math.max(l, r) + 1;
    }

 

以上是关于直径问题 Diameter Problems的主要内容,如果未能解决你的问题,请参考以下文章

AAA 服务器 — Diameter(直径)协议

[leetcode]543. Diameter of Binary Tree二叉树的直径

LeetCode 5098. 树的直径

LeetCode 0543. 二叉树的直径

LeetCode 0543. 二叉树的直径

[leetCode]543. 二叉树的直径