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)

Learn Python in-depth with real-world projects through our Python certification course. Enroll and become a certified expert to boost your career.

输出

(3, 2)

更新于:2020年10月20日

957 次浏览

启动您的职业生涯

完成课程获得认证

开始学习
广告