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

简单二叉树节点最近左右子节点获取问题:代码返回全部子节点求助

问题:二叉树获取直接子节点却显示所有后代的解决办法

问题场景

我需要获取简单二叉树(非BST)中单个节点的最近左右子节点,但调用racine.enfant_gauche或get_gauche()方法时,本应返回根节点A的直接左子节点B,实际显示的却是B及其所有后代节点(如C、D、E等)。

原因分析

问题并非出在get_gauche()方法或enfant_gauche属性上——这些方法确实只返回当前节点的直接子节点。显示所有后代的根源在于ArbreBinaire类的__str__方法:

def __str__(self):
    return f"{self.valeur}, ({self.enfant_gauche}, {self.enfant_droit})"

当你将节点对象(如racine.enfant_gauche)作为tkinter按钮的text参数时,Python会自动调用该对象的__str__方法生成字符串。而这个方法会递归拼接子节点的__str__结果,最终把整个子树的结构都打印出来,导致你误以为返回了所有后代。

解决方案

有两种简单的修复方式:

方案1:修改__str__方法,仅返回节点值

如果不需要在打印节点时显示整个子树结构,直接修改__str__让它只返回节点的valeur:

class ArbreBinaire:
    # 其他方法保持不变
    def __str__(self):
        return f"{self.valeur}"

方案2:调用节点的get_valeur()方法获取值

如果你需要保留__str__的原有功能(用于调试树结构),则在tkinter中显示时,不要直接传节点对象,而是调用get_valeur()获取节点的值:
修改valeur_bouton函数中的调用:

jeu('Hello', racine.valeur, racine.enfant_gauche.get_valeur())

验证说明

无论采用哪种方案,racine.get_gauche()返回的始终是B节点对象,只是显示时只会输出B的数值,而非整个子树。你可以通过打印类型验证:

print(type(racine.get_gauche()))  # 输出 <class 'arb.ArbreBinaire'>
print(racine.get_gauche().get_valeur())  # 输出 B

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 06:09:19