You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

二叉树顶视图代码提交异常:GFG自定义用例正常但提交出错

问题分析与解决方案

你的代码出现同一输入输出不同的问题,核心原因有两个:

  • 判断逻辑错误:用if not map[dim]判断是否存储节点时,Python会把0视为假值。如果某个垂直维度(dim)的第一个节点值为0,后续同一维度的节点会覆盖它,导致结果不可控;
  • 变量名冲突:使用Python内置函数map作为变量名,虽不会直接引发异常,但可能导致未知的环境兼容问题。

另外,用列表模拟队列的pop(0)操作效率极低,建议改用双端队列优化。

修改后的代码如下:

from collections import defaultdict, deque

def topView(self, root):
    # 避免覆盖内置函数,重命名为vertical_map
    vertical_map = defaultdict(int)
    # 用deque实现队列,popleft效率更高且稳定
    queue = deque()
    queue.append((root, 0))
    
    while queue:
        top, dim = queue.popleft()
        # 仅当维度未记录时存储,确保只保留最上层节点
        if dim not in vertical_map:
            vertical_map[dim] = top.data
        
        if top.left:
            queue.append((top.left, dim - 1))
        if top.right:
            queue.append((top.right, dim + 1))
    
    # 按维度排序后提取结果
    sorted_items = sorted(vertical_map.items())
    return [item[1] for item in sorted_items]

关键修改说明

  • 替换判断条件为if dim not in vertical_map:严格保证每个垂直维度只存储第一次遇到的节点(即树中最上层的节点,符合顶视图定义),彻底解决0值导致的覆盖问题;
  • 改用deque实现队列:popleft()操作时间复杂度为O(1),远优于列表的pop(0)(O(n)),同时确保队列的FIFO特性稳定;
  • 重命名变量:避免使用内置名称,提升代码可读性与兼容性。

修改后无论节点值是否为0,都能稳定输出正确的顶视图结果,解决同一输入输出不同的问题。

内容的提问来源于stack exchange,提问作者Abhi Gaba

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 05:25:06