以二进制形式组织项目

2024-09-30 22:16:01 发布

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

我需要你的帮助来组织我的二叉搜索树,问题是如何像这样装载和组织树:

(十一)

(十一)

(11(2())(13())

所以,当我向树中添加一个新节点时,我需要打印这个

(new node(left)(right))

我尝试这样做,但我的代码只打印根,而不打印节点,如下所示:

(十一)

(十一)

(11(11())(11())

我希望你能帮助我。你知道吗

class No():
    def __init__(self, dado):
        self.dado = dado
        self.left = None
        self.right = None

class ArvoreBinariaBusca():
    def __init__(self):
        self.raiz = None

    def Inserir(self, dado, raiz_atual):
        if self.raiz is None:
            self.raiz = No(dado)
            return

        if dado <= raiz_atual.dado:
            if raiz_atual.left is None:
                raiz_atual.left = No(dado)
            else:
                self.Inserir(dado, raiz_atual.left)
        else:
            if raiz_atual.right is None:
                raiz_atual.right = No(dado)
            else:
                self.Inserir(dado, raiz_atual.right)

    def printArvore(self, raiz):
        if raiz is None:
            return
        if raiz.left:
            no_esquerda = self.printArvore(raiz.left)
        else:
            no_esquerda = {}

        if raiz.right:
            no_direita = self.printArvore(raiz.right)
        else:
            no_direita = {}

        return '( {} {} {})'.format(self.raiz.dado, no_esquerda, no_direita)o

a = ArvoreBinariaBusca()
a.Inserir(11, a.raiz)
a.Inserir(2, a.raiz)
a.Inserir(13, a.raiz)
a.Inserir(4, a.raiz)
a.Inserir(15, a.raiz)
print(a.printArvore(a.raiz))

Tags: noselfrightnoneifisdefleft
2条回答

我提供的解决方案在通用的方式,您可以修改代码和名称的类,方法和变量根据您的方便。你知道吗

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

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

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

    def getRootValue(self):
        return self.root

    def getLeftChild(self):
        return self.leftChild

    def getRightChild(self):
        return self.rightChild

bt = BinaryTree(11)
bt.insertLeft(2)
bt.insertRight(13)
print(bt.getRootValue())
print(bt.getLeftChild().getRootValue())
print(bt.getRightChild().getRootValue())

输出:

11
2
13

希望这能帮到你。你知道吗

查看printArvore()函数的最后一行:

return '( {} {} {})'.format(self.raiz.dado, no_esquerda, no_direita)

您总是返回self的根,这意味着整个二进制搜索树的根。你知道吗

要解决这个问题,只需去掉“自我”:

return '( {} {} {})'.format(raiz.dado, no_esquerda, no_direita)

相关问题 更多 >