leetcode 543
思路
- 路徑長度計算:任意兩個節點之間的路徑長度,等于它們的最低公共祖先到它們各自的深度之和
- 遞歸遍歷:通過后序遍歷(左右根)計算每個節點的左右子樹深度,并更新全局最大直徑
- 深度與直徑的關系:節點的深度是其左右子樹深度的最大值加 1,而
直徑是左右子樹深度之和
實現
const diameterOfBinaryTree = function (root) {let maxDepth = 0 // 全局最大直徑// 遞歸計算每個節點的深度,并更新最大直徑const deep = (root) => {if (!root) return 0; // 空節點深度為0// 計算左子樹深度const leftLen = deep(root.left);// 計算右子樹深度const rightLen = deep(root.right);// 當前節點的直徑(經過該節點的最長路徑)const curLen = leftLen + rightLen;// 更新全局最大直徑maxDepth = Math.max(curLen, maxDepth);// 返回當前節點的深度(用于父節點計算)return Math.max(leftLen, rightLen) + 1}deep(root)return maxDepth;
}