Я пытаюсь построить дерево, используя обходы предварительного и неупорядоченного (список целых чисел). Вот что у меня есть на данный момент:
def build(preorder, inorder, heap): # Builds tree with the inorder and preorder traversal
if len(preorder) == 0:
return None
root = preorder[0] # Root is first item in preorder
k = root
left_count = inorder[(k-1)] # Number of items in left sub-tree
left_inorder = inorder[0:left_count]
left_preorder = preorder[1:1+left_count]
right_inorder = inorder[1+left_count:]
right_preorder = preorder[1+left_count:]
return [root, build(left_preorder, left_inorder), build(right_preorder, right_inorder)]
Я считаю этот алгоритм правильным, хотя могу ошибаться.
У меня такой вопрос - в какой момент я вставляю элементы в дерево? У меня есть класс, который справляется с этим, я просто не уверен, куда вставить этот вызов, так как функция будет работать рекурсивно. Приветствуются любые предложения о том, как мне вставлять узлы в дерево.
root = preorder[0]
это место. Остальное не выглядит правильным. - person user58697   schedule 24.04.2014