简单二叉树节点最近左右子节点获取问题:代码返回全部子节点求助
问题:二叉树获取直接子节点却显示所有后代的解决办法
问题场景
我需要获取简单二叉树(非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
相关产品推荐
相关产品推荐

