【发布时间】:2017-10-27 23:29:50
【问题描述】:
嘿,我正在准备考试,我需要一些帮助。 任务是从一个总是 2^n 长的叶子值数组(从左到右)构建一个二叉和树(父节点键是子键的总和)。我首先将数组转换为节点数组。然后我做了一个递归函数,它结合了对并在一个新的创建节点数组上调用自己。有没有更好的方法来完成这项任务?也许一个“到位”? 例如
输入:[1,2,3,4]
输出:
10 / \ 3 7 / \ / \ 1 2 3 4
class SumTree:
def __init__(self):
self.root = None
class Node:
def __init__(self):
self.key = 0
self.parent = None
self.left = None
self.right = None
def makeNode(key):
n = Node()
n.key = key
return n
def buildSumTree(array):
for i in range(len(array)):
array[i] = makeNode(array[i])
tree = SumTree()
tree.root = buildSumTree_rec(array)
return tree
def buildSumTree_rec(array):
if len(array) == 1 :
return array[0]
else:
a = []
for i in range(0, len(array) // 2, 2):
n = makeNode(array[i].key + array[i + 1].key)
n.left = array[i]
n.right = array[i + 1]
array[i].parent = n
array[i + 1].parent = n
a.append(n)
return buildSumTree_rec(a)
【问题讨论】:
-
请问
inplace在这种情况下是什么意思? -
它不需要额外的内存。与我的每个递归级别创建一个新数组的解决方案不同。数组是要创建的 SumTree 底层的值。
-
其次,你从哪里得到数组?它对元素的组织方式有一些逻辑结构吗?你能举个数组的例子吗?
-
你打算展示预期的输入/输出吗?
标签: python algorithm recursion binary-tree