python - 如何迭代创建通用树的类属性?

标签 python object tree attributes

我正在学习一般树和二叉树数据结构,使用Python作为学习媒介。

我看到二叉树类一般有三个属性,它的值,左 child 和右 child 。一旦做出此设计选择,就不需要任何更改。

然而,一般树可以有任意数量的子树,范围是 0 到无穷大。所以我很好奇,如何创建可变数量的子级(例如 child_1...child_500)?

我是否以错误的方式思考这个问题?也许每棵树都应该有一个 child 属性,它是一个值列表或一个字典,其中键是名称 child_1...child_500,值是它们的 child ..?

最佳答案

正如其他人所指出的,不同数量的命名属性会变得难以处理。列一份 list 是个好主意。就我个人而言,我建议采用链表架构。

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

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

希望这有帮助!

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'

关于python - 如何迭代创建通用树的类属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60122436/

相关文章:

javascript - JSON stringify 忽略数组中的某些值

php - 使用 php 递归构建类别树

python - 我怎样才能使用 zip(), python

python - Pyspark java.lang.OutOfMemoryError : Requested array size exceeds VM limit 错误

python - Pyramid 覆盖默认请求日志以添加新参数

python - python hadoop流中的组合器函数

c++ - 为我在 C++ 中创建的对象声明一个变量

Javascript 函数重写原型(prototype)

python - 二叉搜索树删除中基本情况的目的

algorithm - n 叉树和 m 叉树之间有什么区别吗?