0
다음은 완전한 이진 트리의 재귀 구현입니다 (파이썬에서 이진 검색 트리가 아닙니다. 목록에서 균형 잡힌 트리를 작성하는 데 도움이 필요합니다. 논리 i 생성 작성한 왜곡 된 나무 나는 그것이 큐와 함께 할 수 있지만 재귀 구현을 필요로 알고 여기 파이썬의 재귀 완전한 이진 트리 - 트리가 비뚤어 짐
코드입니다 :..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)
루트를 추출하십시오. 나머지 목록의 왼쪽 절반에서 왼쪽 하위 트리를 만들고 오른쪽 하위 트리에서 오른쪽 하위 트리를 빼냅니다. 노드 수가 정확하게 맞지 않으면 균등하게 나눌 필요가 있습니다. –