Go 刷 leetcode|二叉树的直径

Go语言精选

共 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爱好者值得关注


浏览 28
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报