首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >BST - Python的右侧视图

BST - Python的右侧视图
EN

Stack Overflow用户
提问于 2022-07-09 02:08:29
回答 1查看 44关注 0票数 1

我正在试图找到一个BST的正确的侧面视图。我能够得到一个有效的解决方案,但我注意到使用

在Q中表示I:在范围内用于I(len(Q))

详细说明下面的代码工作

代码语言:javascript
运行
复制
 Definition for a binary tree node.
 class TreeNode:
     def __init__(self, val=0, left=None, right=None):
         self.val = val
         self.left = left
         self.right = right
class Solution:
def rightSideView(self, root: Optional[TreeNode]) -> List[int]:
    if root == None:
        return []

    result = []
    
    q = []
    q.append(root)
    
    while len(q):
        
        for _ in range(len(q)):
            node = q.pop(0)
            if node.left != None:
                q.append(node.left)
                
            if node.right != None:
                q.append(node.right)
        result.append(node.val)
        
    return result

但是当我改变了下面的

在范围内(len(Q)):

(q):

如下所示

代码语言:javascript
运行
复制
    if root == None:
        return []

    result = []
    
    q = []
    q.append(root)
    
    while len(q):
        
        for _ in (q):
            node = q.pop(0)
            if node.left != None:
                q.append(node.left)
                
            if node.right != None:
                q.append(node.right)
        result.append(node.val)
        
    return result

我知道更长的时间能看到正确的侧面。任何人都不知道为什么会这样。

例如,使用输入

输入: root = 1,2,3,null,5,null,4

我使用范围(len(Q))代码输出获得输出: 1,3,4

但是,当我尝试使用范围(Q)代码时,我得到了输出输出: 2,5,4

EN

回答 1

Stack Overflow用户

发布于 2022-07-09 05:47:19

问题是,您是在修改q,同时通过弹出第一个元素来迭代它。迭代器从列表中的下一个位置获取元素,但所有元素都左移了1个位置。

在第一个例子中,使用range(len(q)),结果会产生结果,因为迭代器是根据循环开始时的q长度定义的,所以如果q有4个元素,那么它总是对4个迭代进行循环。_ in (0, 1, 2, 3)

在第二个示例中,每次调用q.pop(0)时,它都会移动列表中由一个位置留下的元素,从而跳过所有其他元素。

示例:

代码语言:javascript
运行
复制
a = [ x for x in range(10)]
for val in a:
    print(val, a.pop(0))

# OUTPUT
 0 0
 2 1
 4 2
 6 3
 8 4

注意val是如何只得到偶数值的,因为for循环创建的迭代器得到列表中的下一个位置(0、1、2、3、4等),而列表本身在每次迭代中都被左移。这也意味着在进入结束循环的StopIteration异常之前,它只获取5个值,而不是10个。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72918442

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档