递归法测二叉树的叶结点
时间: 2023-06-29 19:04:54 浏览: 55
递归法可以很容易地测量二叉树的叶节点数量。递归地遍历二叉树,如果当前节点为空,则返回0,如果当前节点是叶节点,则返回1,否则,递归遍历其左子树和右子树,并将结果相加。
以下是一个示例代码:
```python
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def count_leaves(root: TreeNode) -> int:
if not root:
return 0
if not root.left and not root.right:
return 1
return count_leaves(root.left) + count_leaves(root.right)
```
该函数返回根节点为 `root` 的二叉树的叶节点数量。注意,该函数使用了 `TreeNode` 类来表示二叉树的节点。
相关问题
非递归求二叉树的叶结点个数
非递归求二叉树的叶结点个数可以通过栈来实现。具体步骤如下:
1. 定义一个栈,并将根节点压入栈中。
2. 当栈不为空时,弹出栈顶元素,如果该元素是叶子节点,则计数器加1。
3. 如果该元素不是叶子节点,则将其右子节点和左子节点(如果存在)依次压入栈中。
4. 重复执行第2步到第3步,直到栈为空。
以下是该算法的Python代码实现:
```python
def count_leaves(root):
if not root:
return 0
count = 0
stack = [root]
while stack:
node = stack.pop()
if not node.left and not node.right:
count += 1
else:
if node.right:
stack.append(node.right)
if node.left:
stack.append(node.left)
return count
```
其中,root是二叉树的根节点,该函数返回二叉树的叶子节点个数。
用递归算法统计二叉树的叶结点个数
递归算法是一种自己调用自己的算法,对于统计二叉树的叶结点个数,可以使用递归算法来实现。具体步骤如下:
1. 如果当前节点为NULL,返回0。
2. 如果当前节点的左右子节点都为NULL,说明当前节点是叶子节点,返回1。
3. 递归计算当前节点的左子树中叶结点的个数。
4. 递归计算当前节点的右子树中叶结点的个数。
5. 将步骤3和步骤4的结果相加,即为当前二叉树中叶结点的个数。
下面是具体的实现代码:
```
int countLeafNodes(TreeNode* root) {
if(root == NULL) {
return 0;
}
if(root->left == NULL && root->right == NULL) {
return 1;
}
int leftLeafNodes = countLeafNodes(root->left);
int rightLeafNodes = countLeafNodes(root->right);
return leftLeafNodes + rightLeafNodes;
}
```
其中,`TreeNode` 表示二叉树节点的结构体,包含 `val`、`left` 和 `right` 三个成员变量,分别表示节点的值、左子节点和右子节点。