我需要你的帮助来组织我的二进制搜索树,问题就是安装和组织这样的树:
(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))
答案 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)