1. 程式人生 > 實用技巧 >二叉樹的直徑

二叉樹的直徑

題目描述:

給定一棵二叉樹,你需要計算它的直徑長度。一棵二叉樹的直徑長度是任意兩個結點路徑長度中的最大值。這條路徑可能穿過也可能不穿過根結點。

示例 : 給定二叉樹

      1
/ \
2 3
/ \
4 5

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

注意:兩結點之間的路徑長度是以它們之間邊的數目表示。

解題思路:

遍歷每一個節點,計算每個節點最大直徑(左子樹深度+右子樹深度),更新全域性變數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
 }
}

  地址:https://mp.weixin.qq.com/s/x2YQXBcjMd9gNuK8qNRSCw