2024-06-16 14:44:42 发布
网友
我正在学习通用树和二叉树数据结构,使用python作为学习媒介
我看到二叉树类通常有三个属性,其值、左子级和右子级。一旦做出了这个设计选择,它就不需要任何改变
但是,一般树可以有任意数量的子树,子树的边界为0到无穷大。所以我很好奇,我怎样才能创建一个可变数量的子对象(例如child_1…child_500)
child_1
child_500
我是不是想错了?也许每个树都应该有一个children属性,这是一个值列表或一个字典,其中键是名称child_1…child_500,值是它们的子项
正如其他人所指出的,数量可变的命名属性将变得难以处理。一份清单是个好主意。就个人而言,我建议采用链表体系结构
定义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'
正如其他人所指出的,数量可变的命名属性将变得难以处理。一份清单是个好主意。就个人而言,我建议采用链表体系结构
定义GeneralTreeNode类并将属性定义为value、parent、child、left_sib和right_sib。您可以将最左边的兄弟节点视为“第一个出生的”(这是因为它将被引用为其父节点的唯一子节点。所有其他兄弟节点都可以通过从最左边的兄弟节点进行遍历来访问
这个小例子展示了如何创建这样一个类,设置值和节点之间的关系,以及如何从一个小的三节点树的根遍历到最右边的子树
希望这有帮助
相关问题 更多 >
编程相关推荐