这是我的LeetCode问题代码
对于给定的二叉树,请查找二叉树的最大宽度。一个级别的宽度定义为节点之间的长度,即使在两个节点之间有
None
节点。
我的代码(在PyCharm中)通过了所有给定的测试,但似乎没有通过LeetCode网站。我不知道这是为什么,所以请不要尝试把它插入到网站上,因为我认为我构建二叉树的方式与他们的方法不同。
class Node:
def __init__(self, data):
self.data = data
self.left = None
self.right = None
level_width = {0: [0, 0]}
def get_width(self, root, level=0, pointer=1):
if root.left:
if level + 1 not in self.level_width:
self.level_width[level + 1] = [pointer * 2, 0]
self.level_width[level + 1][0] = min(self.level_width[level + 1][0], pointer * 2)
self.get_width(root.left, level + 1, pointer * 2)
if root.right:
if level + 1 not in self.level_width:
self.level_width[level + 1] = [9999, pointer * 2 + 1]
self.level_width[level + 1][1] = max(self.level_width[level + 1][1], level + 1, pointer * 2 + 1)
self.get_width(root.right, level + 1, pointer * 2 + 1)
return
def widthOfBinaryTree(self, root):
"""
:type root: TreeNode
:rtype: int
"""
self.get_width(root)
max_distance = 1
for k, v in self.level_width.items():
max_distance = max(max_distance, v[1] - v[0] + 1)
return max_distance
root = Node(1)
root.left = Node(3)
root.left.left = Node(5)
root.left.left.left = Node(6)
root.right = Node(2)
root.right.right = Node(9)
root.right.right.right = Node(7)
print(root.widthOfBinaryTree(root))
发布于 2019-07-09 15:37:56
在上面的代码中,您忽略了计算中间的空节点,这就是为什么输入2,1,4,3,空,5的结果是错误的。
您使用DFS(深度优先搜索)算法解决了这个问题,该算法对于查找树的高度非常有用。
BFS (广度优先搜索)算法是解决这一问题的最佳选择.
https://codereview.stackexchange.com/questions/223703
复制相似问题