สมมติว่าเรามีต้นไม้ไบนารี เราต้องการหาค่าของโหนดที่ลึกที่สุด (deepest node) หากมีโหนดลึกที่สุดมากกว่าหนึ่งโหนด ให้คืนค่าโหนดที่อยู่ซ้ายมือสุด (leftmost)
ตัวอย่างเช่น หากอินพุตเป็นต้นไม้ดังรูป ผลลัพธ์จะเป็น 4 เนื่องจาก 4 และ 7 ลึกเท่ากันแต่ 4 อยู่ซ้ายกว่า
ขั้นตอนการแก้ปัญหา (BFS Level Order)
queue = [root]left_max = root.val- วนลูป while
len(queue) > 0:level_size = len(queue)- วนลูป
iจาก 0 ถึงlevel_size - 1:temp = queue.pop(0)- หาก
i == 0ให้left_max = temp.val(โหนดแรกของระดับ = ซ้ายมือสุด) - เพิ่ม
temp.leftและtemp.rightเข้า queue (ถ้ามี)
- คืนค่า
left_max(จะเป็นโหนดซ้ายมือสุดของระดับล่างสุด)
ตัวอย่างโค้ด Python
class TreeNode:
def __init__(self, value):
self.val = value
self.left = None
self.right = None
class Solution:
def solve(self, root):
queue = [root]
left_max = root.val
while len(queue) > 0:
level_size = len(queue)
for i in range(level_size):
temp = queue.pop(0)
if i == 0:
left_max = temp.val
if temp.left:
queue.append(temp.left)
if temp.right:
queue.append(temp.right)
return left_max
ob = Solution()
root = TreeNode(13)
root.left = TreeNode(12)
root.right = TreeNode(14)
root.right.left = TreeNode(16)
root.right.right = TreeNode(22)
root.right.left.left = TreeNode(4)
root.right.left.right = TreeNode(7)
print(ob.solve(root)) # Output: 4
อินพุต
root = TreeNode(13) root.left = TreeNode(12) root.right = TreeNode(14) root.right.left = TreeNode(16) root.right.right = TreeNode(22) root.right.left.left = TreeNode(4) root.right.left.right = TreeNode(7)
เอาต์พุต
4