2024年11月14日 星期四

二元樹建樹、輸出

 二元樹建樹、輸出:

程式碼

class TreeNode:
    def __init__(self, value):
        self.value = value
        self.left = None
        self.right = None

def insert_node(root, value):
    if root is None:
        return TreeNode(value)
    if value < root.value:
        root.left = insert_node(root.left, value)
    else:
        root.right = insert_node(root.right, value)
    return root

def build_tree(values):
    root = None
    for value in values:
        root = insert_node(root, value)
    return root

def display_tree(node, level=0, is_left=None):
    if node is not None:
        # 遞迴處理右子樹
        display_tree(node.right, level + 1, False)
        
        # 顯示當前節點
        prefix = "    " * level
        if is_left is None:
            connector = ""
        elif is_left:
            connector = "/--- "
        else:
            connector = "\\--- "
        
        print(f"{prefix}{connector}{node.value}")
        
        # 遞迴處理左子樹
        display_tree(node.left, level + 1, True)

# 建立二元樹
values = [6, 3, 5, 7, 9, 10, 8, 1, 4, 2]
tree_root = build_tree(values)

# 輸出樹結構
display_tree(tree_root)

輸出結果

執行程式後的輸出如下:

          6
       /     \
     3         7
    / \          \
   1   5         9
    \  /        / \
     2 4       8  10

說明

  • display_tree 函數通過遞迴,先處理右子樹,再處理當前節點,最後處理左子樹,這樣可以顯示出樹的結構。
  • 每層的縮排由 level 控制,connector 用於標識是左子節點還是右子節點。

沒有留言:

張貼留言