力扣 二叉樹直徑(dfs)
阿新 • • 發佈:2022-03-09
力扣 二叉樹的直徑(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 }