2017-04-06 37 views
0

我需要你的幫助來組織我二叉搜索樹,這個問題說來安裝和組織樹是這樣的:組織二叉樹的項目

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

回答

1

看看你printArvore的最後一行()函數

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

您務必將自我的根,這意味着整個BinarySearchTree的根源。

爲了解決這個問題只是刪除了「自我」:

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

謝謝你,這解決了我的問題:) – DouglasNickson

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 

希望這將幫助你。

+0

這是一個不正確的實施BinarySearchTree的,不回答這個問題的。插入需要遞歸完成,如@DouglasNickson實現。 –