要重建二元樹,你可以使用遞迴的方式根據陣列中的元素來建立節點。以下是一個示例的演算法:
class Node:
def __init__(self, key):
self.key = key
self.left = None
self.right = None
def build_binary_tree(arr, start, end):
if start > end:
return None
mid = (start + end) // 2
root = Node(arr[mid])
root.left = build_binary_tree(arr, start, mid – 1)
root.right = build_binary_tree(arr, mid + 1, end)
return root
# 測試範例
arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
root = build_binary_tree(arr, 0, len(arr) – 1)
這個演算法中,build_binary_tree 函式接受一個陣列 arr、起始索引 start 和結束索引 end 作為參數。在每次遞迴呼叫中,它計算中間索引 mid,並使用 arr[mid] 創建一個新節點作為根節點。然後,遞迴呼叫 build_binary_tree 來建立根節點的左子樹和右子樹,範圍分別為 start 到 mid – 1 和 mid + 1 到 end。最後,返回根節點。
關於該樹是否為二元搜尋樹,取決於陣列中元素的排列順序。如果陣列 arr 是按照升序(或降序)排列的,那麼重建的二元樹將是一棵二元搜尋樹。但如果陣列中元素的排列不是有序的,那麼重建的樹不會是二元搜尋樹。
評論0