Python程式:查詢二叉樹的葉子節點和非葉子節點


假設我們有一個二叉樹,我們需要找到一個包含兩個數字的列表,第一個數字是樹中葉子節點的數量,第二個數字是非葉子節點的數量。

例如,如果輸入是:

那麼輸出將是 (3, 2),因為有 3 個葉子節點和 2 個非葉子節點。

為了解決這個問題,我們將遵循以下步驟:

  • 如果n為空,則
    • 返回 (0, 0)
  • 如果n的左子節點為空且n的右子節點為空,則
    • 返回 (1, 0)
  • left := solve(n的左子節點)
  • right := solve(n的右子節點)
  • 返回 (left[0] + right[0], 1 + left[1] + right[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)

更新於:2020年10月20日

957 次瀏覽

啟動您的職業生涯

完成課程獲得認證

開始學習
廣告