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

โปรแกรมค้นหาโหนดลีฟและโหนดที่ไม่ใช่ลีฟของไบนารีทรีใน Python


สมมติว่าเรามีไบนารีทรี เราต้องหารายการของตัวเลขสองตัว โดยที่หมายเลขแรกคือการนับใบไม้ในต้นไม้ และหมายเลขที่สองคือการนับโหนดที่ไม่ใช่ใบไม้

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

โปรแกรมค้นหาโหนดลีฟและโหนดที่ไม่ใช่ลีฟของไบนารีทรีใน Python

จากนั้นผลลัพธ์จะเป็น (3, 2) เนื่องจากมี 3 ลีฟและ 2 โหนดที่ไม่ใช่ลีฟ

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • ถ้า n เป็นโมฆะ แล้ว
    • ส่งคืน (0, 0)
  • ถ้าด้านซ้ายของ n เป็นค่าว่าง และด้านขวาของ n เป็นค่าว่าง ดังนั้น
    • ผลตอบแทน (1, 0)
  • ซ้าย :=แก้ (ซ้ายของ n)
  • ขวา :=แก้(ทางขวาของ n)
  • กลับ (ซ้าย[0] + ขวา[0], 1 + ซ้าย[1] + ขวา[1])

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

ตัวอย่าง

class TreeNode:
   def __init__(self, data, left = None, right = None):
      self.val = data
      self.left = left
      self.right = right
class Solution:
   def solve(self, n):
      if not n:
         return 0, 0
      if not n.left and not n.right:
         return 1, 0
      left, right = self.solve(n.left), self.solve(n.right)
      return left[0] + right[0], 1 + left[1] + right[1]
ob = Solution()
root = TreeNode(6)
root.left = TreeNode(2)
root.right = TreeNode(6)
root.right.left = TreeNode(10)
root.right.right = TreeNode(2)
print(ob.solve(root))

อินพุต

root = TreeNode(6)
root.left = TreeNode(2)
root.right = TreeNode(6)
root.right.left = TreeNode(10)
root.right.right = TreeNode(2)

ผลลัพธ์

(3, 2)