如何迭代地为通用树创建类属性?

2024-06-16 14:44:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在学习通用树和二叉树数据结构,使用python作为学习媒介

我看到二叉树类通常有三个属性,其值、左子级和右子级。一旦做出了这个设计选择,它就不需要任何改变

但是,一般树可以有任意数量的子树,子树的边界为0到无穷大。所以我很好奇,我怎样才能创建一个可变数量的子对象(例如child_1child_500

我是不是想错了?也许每个树都应该有一个children属性,这是一个值列表或一个字典,其中键是名称child_1…child_500,值是它们的子项


Tags: 对象名称child数据结构列表数量字典属性
1条回答
网友
1楼 · 发布于 2024-06-16 14:44:42

正如其他人所指出的,数量可变的命名属性将变得难以处理。一份清单是个好主意。就个人而言,我建议采用链表体系结构

定义GeneralTreeNode类并将属性定义为value、parent、child、left_sib和right_sib。您可以将最左边的兄弟节点视为“第一个出生的”(这是因为它将被引用为其父节点的唯一子节点。所有其他兄弟节点都可以通过从最左边的兄弟节点进行遍历来访问

这个小例子展示了如何创建这样一个类,设置值和节点之间的关系,以及如何从一个小的三节点树的根遍历到最右边的子树

希望这有帮助

class GeneralTreeNode():

def __init__(self,value=None,parent=None,child=None,left_sib=None,right_sib=None):
    self.value = value
    self.parent = parent
    self.child = child
    self.left_sib = left_sib
    self.right_sib = right_sib

def get_value(self):
    return self.value

def get_parent(self):
    return self.parent

def get_child(self):
    return self.child

def get_left(self):
    return self.left_sib

def get_right(self):
    return self.right_sib   

def set_parent(self,parent):
    self.parent = parent

def set_child(self,child):
    self.child = child

def set_left(self,left_sib):
    self.left_sib = left_sib

def set_right(self,right_sib):
    self.right_sib = right_sib


a1 = GeneralTreeNode(value='a1')
b1 = GeneralTreeNode(value='b1')
b2 = GeneralTreeNode(value='b2')
a1.set_child(b1)
b1.set_parent(a1)
b1.set_right(b2)
b2.set_left(b1)

a1.get_child().get_right().get_value()
>>>> 'b2'

相关问题 更多 >