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)
广告
数据结构
网络
关系数据库管理系统(RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP