[路飞]_LeetCode543.二叉树的直径

127 阅读1分钟

「这是我参与11月更文挑战的第8天,活动详情查看:2021最后一次更文挑战

LeetCode543.二叉树的直径

题目要求:
给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。
示例
  • 给定二叉树

  • 返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。

思路

每一个最长直径都会有一个共公的父节点,然后从这个父节点向下遍历这个二叉树的深度,取一个左边的深度和左右边的深度加起来的最大值就是这个二叉树的直径。

如图都会经过节点1

1.我们需要一个获取深度的方法
  • 节点===null时候直接返回0

  • 然后取左边的值和右边的值相加,和目前的最大值(第一次设置一个初始值)相比取最大值

  • 返回一个最大值 + 1

  • 递归调用这个方法

    let res = 0; function depth(root) {
    if (root == null) return 0;
    const l = depth(root.left);
    const r = depth(root.right);
    res = Math.max(res,l + r);
    return Math.max(l, r) + 1; }

2.最后调用一下方法传入一个要求的二叉树,返回这个res结果就是要获取的直径
depth(root);
return res;

完整代码

var diameterOfBinaryTree = function(root) {    
    let res = 0;    
    function depth(root) {        
    if (root == null) return 0;        
        const l = depth(root.left);        
        const r = depth(root.right);        
        res = Math.max(res,l + r);        
        return Math.max(l, r) + 1;    
    }    
    depth(root);    
    return res;
};