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

Python二叉树键树形展示函数异常,请求排查代码问题

二叉树树形展示函数问题排查

问题1:调用print(display_keys(...))输出None

display_keys函数没有定义返回值,Python中函数默认返回None。你用print包裹调用时,会把函数的返回值(也就是None)打印出来。解决方法是直接调用函数,不要用print包裹:

display_keys(tree2, '  ')

问题2:parse_tuple逻辑错误导致树形结构异常

原parse_tuple函数的条件分支存在逻辑覆盖问题:第一个if处理三元组创建节点后,后续的if data == None和else会无条件执行,覆盖之前创建的节点。比如当输入是三元组时,第一个if生成了带左右子树的节点,但后面的else会重新创建一个仅包含当前三元组作为key的节点,完全丢失了左右子树的关联。

修正方法是把第二个if改成elif,让分支互斥:

def parse_tuple(data):
    if isinstance(data, tuple) and len(data) == 3:
        node = TreeNode(data[1])
        node.left = parse_tuple(data[0])
        node.right = parse_tuple(data[2])
    elif data is None:
        node = None
    else:
        node = TreeNode(data)
    return node

修正后的完整代码

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

def parse_tuple(data):
    if isinstance(data, tuple) and len(data) == 3:
        node = TreeNode(data[1])
        node.left = parse_tuple(data[0])
        node.right = parse_tuple(data[2])
    elif data is None:
        node = None
    else:
        node = TreeNode(data)
    return node 

def display_keys(node, space='\t', level=0):
    # 空节点
    if node is None:
        print(space*level + '∅')
        return   
    
    # 叶子节点
    if node.left is None and node.right is None:
        print(space*level + str(node.key))
        return
    
    # 有子节点的节点,先打印右子树,再当前节点,最后左子树
    display_keys(node.right, space, level+1)
    print(space*level + str(node.key))
    display_keys(node.left, space, level+1)  

tuple_to_display = ((1, 3, None), 2, ((None, 3, 4), 5,(6, 7, 8)))
tree2 = parse_tuple(tuple_to_display)
display_keys(tree2, '  ')  # 直接调用,不要用print包裹

预期输出效果

运行修正后的代码,会得到如下树形展示(右子树在上,左子树在下,符合直观的树形结构):

8
    7
      6
  5
      4
    3
      ∅
2
    3
      1
      ∅

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 15:45:56