Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรม Copy N-ary Tree ใน Python (BFS)

โจทย์

ได้รับ Root ของ N-ary Tree ต้องสร้าง Copy ของ Tree ทั้งหมด (Deep Copy) แล้วแสดง Preorder ของทั้งต้นฉบับและ Copy (จะเหมือนกันทุกอย่าง)

อัลกอริธึม (BFS กับ Queue)

  1. สร้าง Node ใหม่สำหรับ Root
  2. ใช้ Deque เก็บคู่ (Original Node, Cloned Node)
  3. วนลูป Dequeue แล้ว Clone ลูกทุกตัว นำเข้าคิวต่อ

โค้ด Python


from collections import deque

class Node:
    def __init__(self, value, child=None) -> None:
        self.val = value
        self.children = []
        if child:
            for v in child:
                self.children.append(v)

def solve(root):
    if not root:
        return root
    head = Node(root.val)
    q = deque([(root, head)])
    while q:
        node, cloned = q.popleft()
        for chld in node.children:
            new_n = Node(chld.val)
            cloned.children.append(new_n)
            q.append((chld, new_n))
    return head

def treeprint(node, tree):
    if node is None:
        tree.append("None")
        return tree
    if tree is None:
        tree = []
    tree.append(node.val)
    for child in node.children:
        treeprint(child, tree)
    return tree

# สร้าง Tree
node6 = Node(65)
node5 = Node(56)
node4 = Node(42, [node5, node6])
node3 = Node(32)
node2 = Node(27)
node1 = Node(14, [node2, node3, node4])
root = node1

copynode = solve(root)
print(treeprint(copynode, None))  # Output: [14, 27, 32, 42, 56, 65]

Input / Output

Input:  Root of original tree
Output: [14, 27, 32, 42, 56, 65] (Preorder of cloned tree)