题目:
给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过根结点。
示例 :
给定二叉树
1
/ \
2 3
/ \
4 5
返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。
注意:两结点之间的路径长度是以它们之间边的数目表示。
题目的理解:
使用分治的方式,将大问题转化为小问题。计算每一个节点的left最大直径,right最大直径,父类获取到的left或者right的最大直接就是子节点的max(left, right)。获得所有节点的最大直径后,获取最大值。
python实现
class Solution:
def diameterOfBinaryTree(self, root: TreeNode) -> int:
if root is None:
return 0
result = list()
def recursion(node: TreeNode) -> (int, int):
if node.left is None and node.right is None:
result.append(0)
return 0, 0
elif node.left is None:
left, right = recursion(node.right)
result.append(max(left, right) + 1)
return 0, max(left, right) + 1
elif node.right is None:
left, right = recursion(node.left)
result.append(max(left, right) + 1)
return max(left, right) + 1, 0
else:
left1, right1 = recursion(node.left)
left2, right2 = recursion(node.right)
result.append(max(left1, right1) + 1 + max(left2, right2) + 1)
return max(left1, right1) + 1, max(left2, right2) + 1
recursion(root)
return max(result)
提交
成绩好差// END 放下心中的不快,才能投入到喜欢的事情上。
网友评论