โจทย์: กำหนด Binary Tree และ vertical level l ตรวจสอบว่าโหนดในระดับนั้นเรียงจากบนลงล่าง (ตาม level order) หรือไม่
ตัวอย่าง: level -1 มีโหนด 3, 7 → เรียงแล้ว → True
อัลกอริทึม BFS + Vertical Level Tracking
- BFS (queue) พร้อมเก็บ (node, level)
- root อยู่ level 0, left child = level-1, right child = level+1
- ตอน dequeue: ถ้า level == target → ตรวจสอบค่ากับ previous_value (ต้อง ≥)
- ถ้าเจอค่าลดลง → False
- จบลูปไม่เจอ → True
ตัวอย่างโค้ด
from collections import deque
from sys import maxsize
INT_MIN = -maxsize
class TreeNode:
def __init__(self, key):
self.val = key
self.left = None
self.right = None
def are_elements_sorted(root, level):
if root is None:
return True
prev_val = INT_MIN
q = deque()
q.append((root, 0))
while q:
node, curr_level = q.popleft()
if curr_level == level:
if prev_val <= node.val:
prev_val = node.val
else:
return False
if node.left:
q.append((node.left, curr_level - 1))
if node.right:
q.append((node.right, curr_level + 1))
return True
# ตัวอย่างต้นไม้
root = TreeNode(2)
root.left = TreeNode(3)
root.right = TreeNode(6)
root.left.left = TreeNode(8)
root.left.right = TreeNode(5)
root.left.right.left = TreeNode(7)
print(are_elements_sorted(root, -1)) # True
ผลลัพธ์
True
สรุป: BFS ติดตาม vertical level O(n) time O(n) space (queue) ตรวจสอบลำดับในระดับเป้าหมายแบบ streaming ไม่ต้องเก็บทั้งระดับ