สมมติว่าเรามีต้นไม้ไบนารี เราต้องหาจำนวนโหนดที่เป็นลูกคนเดียว อย่างที่เราทราบกันดีว่า node x ถูกเรียกว่าโหนดลูกเดียวเมื่อพาเรนต์มีลูกเพียงคนเดียวคือ x
ดังนั้นหากอินพุตเป็นแบบ
จากนั้นผลลัพธ์จะเป็น 2 เนื่องจาก 8 และ 6 เป็นเพียงลูกเดียว
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้:
- ถ้ารูทเป็นโมฆะ
- คืน 0
- d :=คิวสองสิ้นสุด
- ใส่รูทที่ส่วนท้ายของ d
- นับ :=0
- ในขณะที่ d ไม่ว่างเปล่า ทำ
- ปัจจุบัน :=องค์ประกอบด้านซ้ายของ d และลบองค์ประกอบด้านซ้าย
- ถ้ากระแสที่เหลือไม่เป็นโมฆะ
- แทรกด้านซ้ายของกระแสลงใน d
- ถ้ากระแสไฟเป็นโมฆะ
- นับ :=นับ + 1
- ถ้ากระแสไฟไม่เป็นโมฆะ
- แทรกด้านขวาของกระแสลงใน d
- ถ้ากระแสเหลือเป็นโมฆะ
- นับ :=นับ + 1
- จำนวนคืนสินค้า
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น:
โค้ดตัวอย่าง
from collections import deque class TreeNode: def __init__(self, data, left = None, right = None): self.data = data self.left = left self.right = right class Solution: def solve(self, root): if not root: return 0 d = deque() d.append(root) count = 0 while d: current = d.popleft() if current.left: d.append(current.left) if not current.right: count += 1 if current.right: d.append(current.right) if not current.left: count += 1 return count ob = Solution() root = TreeNode(9) root.left = TreeNode(7) root.right = TreeNode(10) root.left.right = TreeNode(8) root.right.right = TreeNode(6) print(ob.solve(root))
อินพุต
root = TreeNode(9)root.left = TreeNode(7)
root.right = TreeNode(10)
root.left.right = TreeNode(8)
root.right.right = TreeNode(6)
ผลลัพธ์
2