我是编程的初学者,我在其他问题中找不到答案。 我想创建一个高度为h的空二进制树。
我的代码:
class node:
def __init__(self, a = None):
self.value = a
self.left = None
self.right = None
def postorder(tree,abba):
if tree != None:
postorder(tree.left,abba)
postorder(tree.right,abba)
abba.append(tree.value)
def inorder(tree,abba):
if tree != None:
inorder(tree.left,abba)
abba.append(tree.value)
inorder(tree.right,abba)
我想定义一个函数
def getBinaryTree(h):
这给了我一棵水平为h的树。所以: empty tree of level
有什么想法吗?
答案 0 :(得分:2)
<强>更新强>
要制作高度为h
的二叉树,您需要添加2^(h+1)-1
个节点。高度为0的树意味着,树只包含一个节点,即根节点。例如,要创建高度为3的树,您需要添加2^(3+1)-1 = 15
个节点。
如果要创建一组可以使用给定代码形成二叉树的节点,可以执行以下操作。
import math
class node:
def __init__(self, a = None):
self.value = a
self.left = None
self.right = None
def getBinaryTree(tree_height):
tree_nodes = [None] * int((math.pow(2, tree_height+1) - 1))
for i in range(tree_height):
start_index = int(math.pow(2, i) - 1)
end_index = int(math.pow(2, i+1) - 1)
for j in range(start_index, end_index):
tree_nodes[j] = node(j)
if j == 0: continue
if j % 2 == 0: # a right child
parent_index = int((j - 2) / 2)
tree_nodes[parent_index].right = tree_nodes[j]
else: # a left child
parent_index = int((j - 1) / 2)
tree_nodes[parent_index].left = tree_nodes[j]
return tree_nodes[0] # returns the root node
def printTree(tree_node, inorder_tree_walk):
if tree_node != None:
printTree(tree_node.left, print_tree)
inorder_tree_walk.append(tree_node.value)
printTree(tree_node.right, print_tree)
root = getBinaryTree(4)
inorder_tree_walk = []
printTree(root, inorder_tree_walk)
print(inorder_tree_walk)
那么,该计划的作用是什么?
程序创建2^(h+1)-1
个节点以形成高度为h
的树。节点存储在列表tree_nodes
中。节点之间的父子关系存储在tree_nodes
中,如下所示。
i
的左子元素:(2i + 1)元素i
的右子:(2i + 2)元素创建子节点时,将其设置为其父节点的左/右子节点。