组织二叉树中的项目

时间:2017-04-06 04:39:37

标签: python

我需要你的帮助来组织我的二进制搜索树,问题就是安装和组织这样的树:

(11()())

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

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

因此,当我向树中添加一个新节点时,我需要打印它,

(new node(left)(right))

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

(11()())

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

(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))

2 个答案:

答案 0 :(得分:1)

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

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

希望这会帮助你。

答案 1 :(得分:1)

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

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

您总是返回 self 的根,这意味着整个BinarySearchTree的根。

要解决这个问题,只需删除'self':

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