这是一个完整二叉树的递归实现(不是Python中的二进制搜索树。需要帮助构建平衡树的逻辑,我编写的逻辑会生成一个偏斜的树。我知道它可以使用队列来完成,但我需要一个递归实现。
以下是代码:
class Node:
"""A simple Binary Node to be used in a Tree"""
def __init__(self, value=-1, leftNode=None, rightNode=None):
self.value = value
self.leftNode = leftNode
self.rightNode = rightNode
class BinaryTree:
def __init__(self, root=None):
self.root = root
self.noOfLeftNodes = 0
self.noOfRightNodes = 0
def addNode(self, root, node):
if self.root is None:
self.root = node
return
if root.leftNode is None:
root.leftNode = node
self.noOfLeftNodes += 1
return
elif root.rightNode is None:
root.rightNode = node
self.noOfRightNodes += 1
return
else:
if self.noOfLeftNodes - self.noOfRightNodes < 2:
self.addNode(root.leftNode, node)
else:
self.addNode(root.rightNode, node)
def preorder(self, root):
if root is None:
return
print(root.value)
self.preorder(root.leftNode)
self.preorder(root.rightNode)
#Test stub
bt = BinaryTree()
nodes = [1, 2, 3, 4, 5, 6, 7]
for i in range(len(nodes)):
bt.addNode(bt.root, Node(nodes[i]))
print('---Binary Tee---')
bt.preorder(bt.root)
答案 0 :(得分:0)
考虑一下算法运行时会发生什么:
else
,因为#left - #right = 0&lt; 2,插入...... 提示: #left和#right 不正在做他们应该做的事情。如果在根的右子树中插入左子项,则#left会递增。尝试为每个节点维护这些值,而不仅仅是整个树的一次。