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

โปรแกรมหาผลรวมค่าทุก Node ใน Binary Tree (Python)

ปัญหา

กำหนด Binary Tree หาผลรวมค่าของทุก node

ตัวอย่าง: Tree: 2→right→4→left=3, right=5 → Sum = 2+4+3+5 = 14

วิธีแก้: Recursive DFS

อัลกอริทึม

  1. ฟังก์ชัน recurse(node): คืนค่า sum ของ subtree rooted at node
  2. val = node.val
  3. ถ้ามี left child: val += recurse(left)
  4. ถ้ามี right child: val += recurse(right)
  5. คืนค่า val
  6. Main: ถ้า root เป็น None → 0, ไม่งั้น recurse(root)

โค้ด Python

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

class Solution:
    def recurse(self, node):
        val = node.val
        if node.left:
            val += self.recurse(node.left)
        if node.right:
            val += self.recurse(node.right)
        return val
    
    def solve(self, root):
        if not root:
            return 0
        return self.recurse(root)

# ทดสอบ
ob = Solution()
root = TreeNode(2)
root.right = TreeNode(4)
root.right.left = TreeNode(3)
root.right.right = TreeNode(5)

print(ob.solve(root))  # 14

ความซับซ้อน

  • Time: O(n) - เยี่ยมทุก node 1 ครั้ง
  • Space: O(h) - recursion stack

Iterative Versions

DFS with Stack

def solve_iterative_dfs(self, root):
    if not root:
        return 0
    total = 0
    stack = [root]
    while stack:
        node = stack.pop()
        total += node.val
        if node.left:
            stack.append(node.left)
        if node.right:
            stack.append(node.right)
    return total

BFS with Queue

from collections import deque

def solve_iterative_bfs(self, root):
    if not root:
        return 0
    total = 0
    q = deque([root])
    while q:
        node = q.popleft()
        total += node.val
        if node.left:
            q.append(node.left)
        if node.right:
            q.append(node.right)
    return total

ประยุกต์ใช้

Tree aggregation: sum, count, max, min, average - pattern เดียวกันเปลี่ยน operation