使用 Python 中的 类 为树节点分配名称

assigning name to tree node using classes in Python

如何给根的左边child的左边child分配一个名字?我是 类 的新手。最后两行是我尝试进行分配的地方。感谢您的帮助!

class BinaryTree:
    def __init__(self,rootName):
        self.root = rootName
        self.leftChild = None
        self.rightChild = None

    def insertLeft(self,newNode):
        if self.leftChild == None:
            self.leftChild = BinaryTree(newNode)
        else:
            t = BinaryTree(newNode)
            t.leftChild = self.leftChild
            self.leftChild = t

    def insertRight(self,newNode):
        if self.rightChild == None:
            self.rightChild = BinaryTree(newNode)
        else:
            t = BinaryTree(newNode)
            t.rightChild = self.rightChild
            self.rightChild = t


    def getRightChild(self):
        return self.rightChild

    def getLeftChild(self):
        return self.leftChild

    def setRootVal(self,obj):
        self.root = obj

    def getRootVal(self):
        return self.root


r = BinaryTree('a')
r.leftChild = 'b'
r.rightChild = 'c'

r.insertLeft = BinaryTree('b')
r.insertRight = BinaryTree('c')


r.getLeftChild().leftChild = 'd' 
r.leftChild.leftChild = 'd'

最后两个语句都给我这个错误:'str' object 没有属性 'getRootVal' 我正在尝试创建一个看起来像这样的树:

查看BinaryTree的接口,你应该调用insertLeftinsertRight将children添加到树中,而不是:

r.leftChild = 'b'
r.rightChild = 'c'

leftChildrightChild 应该是 BinaryTree objects,而不是字符串。虽然你可以写:

r.leftChild = BinaryTree('b')
r.rightChild = BinaryTree('c')

不处理leftChildrightChild不是None的情况。这就是您应该使用 insertLeftinsertRight 的原因,它们确实为您处理了这些情况:

r.insertLeft('b')
r.insertRight('c')

要插入 def,我们使用 insertLeftinsertRight:

同样的方法
r.getLeftChild().insertRight('d')
r.getRightChild().insertLeft('e')
r.getRightChild().insertRight('f')