假设我们有一棵二叉树,我们必须找到树的顶视图,它们将从左到右排序。
因此,如果输入像图像,则输出将为[3、5、8、6、9],因为3在2之上,而5在7之上,因此它们不可见。
为了解决这个问题,我们将遵循以下步骤-视图:=一个新的空映射
q:=双头队列
在q的末尾插入对(root,0)
开始:= inf,结束:= -inf
当q不为空时,执行在q的末尾插入(节点的右边,坐标+ 1)
在q的末尾插入(节点的左侧,coord − 1)
view [coord]:=节点值(节点,坐标):= q的左元素,然后删除q的左元素
开始:=开始和协调的最小值
结束:=结束和协调的最大值
如果看不到坐标,则
如果节点的左边不为空,则
如果节点的权利不为空,则
res:=一个新列表
对于我范围内的开始到结束,在res的末尾插入view [i]
如果我认为,那么
返回资源
让我们看下面的实现以更好地理解-
示例
from collections import deque
class TreeNode:
def __init__(self, data, left = None, right = None):
self.val = data
self.left = left
self.right = right
class Solution:
def solve(self, root):
view = {}
q = deque()
q.append((root, 0))
start = float("inf")
end = float("-inf")
while q:
node, coord = q.popleft()
start = min(start, coord)
end = max(end, coord)
if coord not in view:
view[coord] = node.val
if node.left:
q.append((node.left, coord - 1))
if node.right:
q.append((node.right, coord + 1))
res = []
for i in range(start, end + 1):
if i in view:
res.append(view[i])
return res
ob = Solution()
root = TreeNode(5)
root.left = TreeNode(3)
root.right = TreeNode(8)
root.right.left = TreeNode(7)
root.right.right = TreeNode(6)
root.right.left.left = TreeNode(2)
root.right.right.right = TreeNode(9)
print(ob.solve(root))
输入值
root = TreeNode(5) root.left = TreeNode(3) root.right = TreeNode(8)
root.right.left = TreeNode(7) root.right.right = TreeNode(6)
root.right.left.left = TreeNode(2) root.right.right.right =
TreeNode(9)输出结果[3, 5, 8, 6, 9]