[英]Recursive Complete Binary Tree in Python - The tree is skewed
这是完整二叉树的递归实现(不是列表中的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)
考虑一下算法运行时会发生什么:
else
并因为#left-#right = 0 <2,所以将其插入... 提示: #left和#right 并未执行应有的操作。 如果您在根的右子树中插入一些东西作为左孩子,则#left会增加。 尝试为每个节点维护这些值,而不是为整个树维护一次。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.