以二叉链表为存储结构,设计一个求二叉树叶子节点数的算法
时间: 2024-11-20 09:56:37 浏览: 16
头歌数据结构二叉树的二叉链表存储及基本操作
5星 · 资源好评率100%
以二叉链表(每个节点包含一个值、指向左孩子的指针和指向右孩子的指针)作为二叉树的存储结构,我们可以使用递归或迭代的方式遍历整个二叉树并计算叶子节点的数量。这里介绍一种简单的递归方法:
1. **基本情况**:如果当前节点为空(NULL),说明已经到达了叶子节点,计数器加一。
2. **递归步骤**:对于非空节点,分别对它的左子节点和右子节点进行同样的操作。由于我们是在处理二叉链表,不需要额外的数据结构来跟踪栈,所以递归过程直接在函数调用中完成。
```c
// 假设我们有一个名为Node的结构体,定义如下:
typedef struct Node {
int value;
struct Node* left;
struct Node* right;
} Node;
int countLeaves(Node* root) {
// 如果根节点为空,返回0
if (root == NULL) {
return 0;
}
// 否则,如果左右孩子都为空,说明是叶子节点,计数器加1;否则递归地计算左右子树的叶子节点数
if (root->left == NULL && root->right == NULL) {
return 1;
} else {
// 递归返回左子树和右子树的叶子节点总数
return countLeaves(root->left) + countLeaves(root->right);
}
}
```
执行这个`countLeaves`函数,传入二叉链表的根节点,即可得到叶子节点的数量。
阅读全文