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
相关产品推荐
相关产品推荐

