1. 程式人生 > 其它 >力扣 二叉樹直徑(dfs)

力扣 二叉樹直徑(dfs)

力扣 二叉樹的直徑(dfs)

題目連結:https://leetcode-cn.com/problems/diameter-of-binary-tree/

題目的意思是求二叉樹的直徑,就是從任意節點出發,到任意節點結束,最長的那一條路徑,也就是這條路上經過節點的數量減去1就是最長直徑

需要明確的是,其最長直徑不一定非得要經過根節點,所以我們應該以每個節點當做根節點,儲存其路徑最大值

同時,以該節點為根節點的最大路徑即為max(左子樹最大長度,右子樹最大長度)+1

以該節點為根節點的長度為左子樹長度+右子樹長度

流程:

  • 每個點為中心的直徑就是這個點左右子樹的深度之和;
  • res儲存最大直徑,最大直徑即為每次訪問某個結點時獲得的以該節點為中心的直徑;
  • 返回值為以該節點為根的子樹的深度;
var ans int
func dfs(root *TreeNode) int{
	if root==nil{
		return 0
	}
	x1:=dfs(root.Left)
	x2:=dfs(root.Right)
	result:=x1+x2 // 左子樹長度+右子樹長度 就等於以該節點為根節點的最大長度

	// 儲存最大長度
	if result>ans{
		ans=result
	}

	if x1>x2{ // 以該節點為根節點的最大路徑即為max(左子樹最大長度,右子樹最大長度)+1
		return x1+1
	}
	return x2+1
}
func diameterOfBinaryTree(root *TreeNode) int {
	ans=0
	dfs(root)
	return ans
}