2024年11月14日 星期四

樹葉

 「樹葉」(leaf nodes)是指沒有子節點的節點,即其左右子節點均為 None 的節點。以下是如何實現查找樹葉節點的 Python 程式。


Python 程式碼

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 find_leaves(node, leaves):
    if node is not None:
        # 如果當前節點是樹葉,加入結果
        if node.left is None and node.right is None:
            leaves.append(node.value)
        else:
            # 遞迴檢查左子樹
            find_leaves(node.left, leaves)
            # 遞迴檢查右子樹
            find_leaves(node.right, leaves)
    return leaves

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

# 找到所有樹葉
leaves = find_leaves(tree_root, [])

# 輸出結果
print("樹葉節點:", leaves)

運行結果

對於二元樹:

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

樹葉節點為:

[2, 4, 8, 10]

程式解釋

  1. find_leaves 函數:

    • 檢查當前節點是否為樹葉(左右子節點均為 None)。
    • 如果是,將節點值加入 leaves
    • 否則,遞迴檢查左子樹和右子樹。
  2. 結果:

    • 結果列出所有樹葉節點的值,按遍歷順序。

沒有留言:

張貼留言