LeetCode:二叉树的直径

古城微笑少年丶 2023-07-25 09:23 14阅读 0赞

一. 题目描述

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

示例 :
给定二叉树

  1. 1
  2. / \
  3. 2 3
  4. / \
  5. 4 5

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

注意:两结点之间的路径长度是以它们之间边的数目表示。

来源:力扣(LeetCode)
原题链接:link.

二. 思路及其代码

  1. 首先我们知道一条路径的长度为该路径经过的节点数减一,所以求直径(即求路径长度的最大值)等效于求路径经过节点数的最大值减一。
  2. 而任意一条路径均可以被看作由某个节点为起点,从其左儿子和右儿子向下遍历的路径拼接得到。

    /**

    • Definition for a binary tree node.
    • public class TreeNode {
    • int val;
    • TreeNode left;
    • TreeNode right;
    • TreeNode(int x) { val = x; }
    • }
      */
      class Solution {
      int maxd=0;
      public int diameterOfBinaryTree(TreeNode root) {
      1. depth(root);
      2. return maxd;
      }
      public int depth(TreeNode node){
      1. if(node==null){
      2. return 0;
      3. }
      4. int Left = depth(node.left); // 左儿子为根的子树的深度
      5. int Right = depth(node.right);// 右儿子为根的子树的深度
      6. maxd=Math.max(Left+Right,maxd);//将每个节点最大直径(左子树深度+右子树深度)当前最大值比较并取大者
      7. return Math.max(Left,Right)+1;//返回节点深度
      }
      }

4.复杂度:

时间复杂度:O(n)。
空间复杂度:O(Height)。

发表评论

表情:
评论列表 (有 0 条评论,14人围观)

还没有评论,来说两句吧...

相关阅读

    相关 leetcode543.直径

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