543. 二叉树的直径

传送门

代码

class Solution {
    private int ans = 1;
    public int diameterOfBinaryTree(TreeNode root) {
        dfs(root);
        return ans - 1;
    }
    public int dfs(TreeNode root) {
        if(root == null) return 0;
        int L = dfs(root.left);
        int R = dfs(root.right);
        ans = Math.max(L + R + 1,ans);
        return Math.max(L,R) + 1;
    }
}

思路

我原先写过一篇求树的直径的方法 树的直径 ,是算法竞赛中的解法

这题leetcode,就直接暴力可以了

首先,把每个结点都当成中点,那么这个节点所在的路径长度为 \(L + R+1\)

\(L\) 是左子树的长度 ,\(R\) 是右子树的长度

那么我们只要遍历每个结点,然后不断的更新这个全局变量 \(ans\) 即可

\(dfs\) 返回的是以 \(root\) 为根的高度,递归下去搜索就行

posted @ 2021-01-01 19:20  南风--  阅读(60)  评论(0编辑  收藏  举报