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

โปรแกรมหาจำนวนลูกคนเดียวในไบนารีทรีใน python


สมมติว่าเรามีต้นไม้ไบนารี เราต้องหาจำนวนโหนดที่เป็นลูกคนเดียว อย่างที่เราทราบกันดีว่า node x ถูกเรียกว่าโหนดลูกเดียวเมื่อพาเรนต์มีลูกเพียงคนเดียวคือ x

ดังนั้นหากอินพุตเป็นแบบ

โปรแกรมหาจำนวนลูกคนเดียวในไบนารีทรีใน python

จากนั้นผลลัพธ์จะเป็น 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