543. 二叉树的直径
给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过根结点。
示例 :
给定二叉树
1
/ \
2 3
/ \
4 5
返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。
注意:两结点之间的路径长度是以它们之间边的数目表示。
解题思路:该题就是求解二叉树中某节点左右子树深度和的最大值。求解二叉树的深度是一个经典的问题,在这个问题的基础上,使用一个变量来不断更新二叉树递归求深度的最大值即可。
Python3代码如下:
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def diameterOfBinaryTree(self, root):
"""
:type root: TreeNode
:rtype: int
"""
self.answer = 0
# getDepth(root)计算以root为根节点的子树的最大深度,只有一个根节点的子树深度为1
def getDepth(root):
if not root:
return 0
left = getDepth(root.left)
right = getDepth(root.right)
# left+right刚好是以root为根节点的路径长度,不用加一减一
self.answer = max(self.answer,left+right)
return max(left,right)+1
getDepth(root)
return self.answer