二叉树查找python_程序在Python中查找二叉树的顶视图

假设我们有一棵二叉树,我们必须找到树的顶视图,它们将从左到右排序。

因此,如果输入像图像,则输出将为[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]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值