Go 刷 leetcode|二叉树的直径

共 1612字,需浏览 4分钟

 ·

2020-08-09 05:42

今天为大家讲解 LeetCode 第 543 题,继续为大家带来树的题目。

题目描述

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

示例 : 给定二叉树

      1
/ \
2 3
/ \
4 5

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

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

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/diameter-of-binary-tree 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路

遍历每一个节点,计算每个节点最大直径(左子树深度+右子树深度),更新全局变量ans。

代码实现

//go

//* Definition for a binary tree node.
type TreeNode struct {
 Val int
 Left *TreeNode
 Right *TreeNode
}

var ans = 0
func diameterOfBinaryTree(root *TreeNode) int {
 ans = 0
 if root == nil {
  return 0
 }
 maxDepth(root)
 return ans
}

// 节点node的最大深度
func maxDepth(node *TreeNode) int {
 if node == nil {
  return 0
 }
 lhight := maxDepth(node.Left)
 rhight := maxDepth(node.Right)
 ans = max(ans, lhight+rhight) //将每个节点最大直径(左子树深度+右子树深度)当前最大值比较并取大者
 return max(lhight, rhight)+1  //返回节点深度
}

func max(x int, y int) int {
 if x > y {
  return x
 }else {
  return y
 }
}
//java
class Solution {
    int maxd=0;
    public int diameterOfBinaryTree(TreeNode root) {
        depth(root);
        return maxd;
    }
    public int depth(TreeNode node){
        if(node==null){
            return 0;
        }
        int Left = depth(node.left);
        int Right = depth(node.right);
        maxd=Math.max(Left+Right,maxd);//将每个节点最大直径(左子树深度+右子树深度)当前最大值比较并取大者
        return Math.max(Left,Right)+1;//返回节点深度
    }
}

郑重声明:

所展示代码已通过 LeetCode 运行通过,请放心食用~




推荐阅读



学习交流 Go 语言,扫码回复「进群」即可


站长 polarisxu

自己的原创文章

不限于 Go 技术

职场和创业经验


Go语言中文网

每天为你

分享 Go 知识

Go爱好者值得关注


浏览 36
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐