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

LeetCode108题:打印TreeNode时如何输出数组而非内存地址?

解决TreeNode打印内存地址转成LeetCode数组格式的问题

要实现将生成的二叉搜索树转换成你需要的数组格式,核心是通过**层序遍历(BFS)**遍历树结构,同时处理空节点和末尾的无效空值,具体步骤如下:

1. 基础代码准备

首先确认TreeNode类定义和108题的递归解法(生成平衡BST):

class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

def sortedArrayToBST(nums):
    if not nums:
        return None
    mid = len(nums) // 2
    root = TreeNode(nums[mid])
    root.left = sortedArrayToBST(nums[:mid])
    root.right = sortedArrayToBST(nums[mid+1:])
    return root

2. 编写树转数组的辅助函数

新增一个函数,用BFS遍历树并生成目标格式的数组:

def tree_to_array(root):
    if not root:
        return []
    
    result = []
    queue = [root]
    
    # 层序遍历所有节点,包括空节点
    while queue:
        node = queue.pop(0)
        if node:
            result.append(node.val)
            queue.append(node.left)
            queue.append(node.right)
        else:
            result.append(None)
    
    # 移除末尾所有无效的空节点
    while result and result[-1] is None:
        result.pop()
    
    # 将None替换为字符串"null",匹配题目示例格式
    return [val if val is not None else "null" for val in result]

3. 测试验证

调用函数测试你的示例:

# 测试示例1
nums1 = [-10,-3,0,5,9]
root1 = sortedArrayToBST(nums1)
# 打印成题目要求的格式(去掉字符串引号)
print(str(tree_to_array(root1)).replace("'null'", "null"))
# 输出: [0, -3, 9, -10, null, 5]

# 测试示例2
nums2 = [1,3]
root2 = sortedArrayToBST(nums2)
print(tree_to_array(root2))
# 输出: [3, 1]

逻辑说明

  • 层序遍历:用队列实现BFS,确保节点按层级顺序加入结果数组,空节点记录为null。
  • 末尾去空:移除数组末尾所有连续的null,避免出现无效的空节点(和LeetCode输出规则一致)。
  • 格式匹配:将Python的None替换为字符串"null",再通过字符串替换去掉引号,完全匹配题目示例格式。

内容的提问来源于stack exchange,提问作者Daniel Chiu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 11:39:58