LeetCode 543
题目描述: 给定一颗二叉树,你需要计算它的直径长度。一个二叉树的直径长度是任意两个节点路径长度的最大值。这条路径可能穿过跟节点。
示例:
返回:3,
解释:它的长度路径是[4,2,1,3] 或者[5,2,1,3]
代码:
# Definition for a binary tree node.
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
class Solution:
def __init__(self):
self.maxPathLen = 0 # 二叉树的最大直径
def diameterOfBinaryTree(self, root):
self.pathLength(root)
return self.maxPathLen # 返回二叉树的最大直径
# 本质是计算根节点到叶子节点之间的最长路径,也就是根节点和叶子节点之间边的数量
def pathLength(self, root):
if root is None:
return 0
left = self.pathLength(root.left)
right = self.pathLength(root.right)
# 添加最大直径值得维护,最大直径 = 左子树最大深度 + 右子树最大深度
if left + right > self.maxPathLen:
self.maxPathLen = left + right
return max([left, right]) + 1