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

如何在Python二叉搜索树中返回节点名称而非对象内存地址?

解决BST搜索返回节点名称而非内存地址的问题

你遇到的问题是因为Python默认会用对象的内存地址来表示实例,而你的search_bst函数返回的是BSTNode对象本身。这里有两种实用的解决思路,你可以根据实际需求选择:

思路1:修改搜索函数直接返回节点的data属性

如果你的核心需求就是获取节点的名称(也就是data属性值),最简单的方式是找到目标节点后,返回它的data,同时处理找不到节点的情况(避免None调用属性报错):

class BSTNode:
    def __init__(self, data=None, left=None, right=None):
        self.data, self.left, self.right = data, left, right

def search_bst(tree, key):
    # 先定位到目标节点对象
    target_node = tree if not tree or tree.data == key else search_bst(tree.left, key) if key < tree.data else search_bst(tree.right, key)
    # 节点存在则返回data,不存在返回None
    return target_node.data if target_node else None

测试示例:

# 构建测试二叉搜索树
root = BSTNode("A")
root.left = BSTNode("B")
root.right = BSTNode("C")

print(search_bst(root, "B"))  # 输出: B
print(search_bst(root, "D"))  # 输出: None

思路2:给BSTNode类添加字符串表示方法

如果你有时候还需要操作节点的其他属性(比如left、right子节点),不想直接丢弃节点对象,那可以给类添加__str__或__repr__方法,让Python打印节点时自动显示data值:

class BSTNode:
    def __init__(self, data=None, left=None, right=None):
        self.data, self.left, self.right = data, left, right
    
    # 用print()打印对象时触发的方法
    def __str__(self):
        return self.data  # 如果data不是字符串,可改为str(self.data)
    
    # 交互式环境查看对象或用repr()时触发的方法(可选)
    def __repr__(self):
        return f"BSTNode(data='{self.data}')"

# 原搜索函数无需修改
def search_bst(tree, key):
    return (tree if not tree or tree.data == key else search_bst(tree.left, key) if key < tree.data else search_bst(tree.right, key))

测试效果:

root = BSTNode("A")
root.left = BSTNode("B")

result = search_bst(root, "B")
print(result)  # 输出: B
print(repr(result))  # 输出: BSTNode(data='B')

两种方式的区别:

  • 思路1直接返回字符串,适合只需要节点名称的场景;
  • 思路2保留节点对象的完整性,同时让打印输出更友好,适合需要操作节点其他属性的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:25:13