在二叉树中组织项目

  • 本文关键字:项目 二叉树 python
  • 更新时间 :
  • 英文 :


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

(

11 (( (

((

11 ( 2 (

( ( ((

11 ( 2 (( ( ( 13 (

(

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

(new node(left)(right))

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

(

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

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

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

你总是返回你自己的根,即整个BinarySearchTree的根。

要解决这个问题,只需删除"自我":

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

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

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

希望这对您有所帮助。

最新更新