递归实现二叉树所有双分支结点的个数
时间: 2024-09-07 17:01:24 浏览: 64
C++使用递归和非递归算法实现的二叉树叶子节点个数计算方法
在C语言中,我们可以使用递归的方式来实现二叉树中所有双分支节点(即每个节点都有两个非空子节点)的个数计数。这里有一个简单的递归算法:
```c
#include <stdio.h>
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
int countDoubleBranches(TreeNode* root) {
if (root == NULL) return 0; // 空节点,没有双分支
// 如果当前节点有两个非空子节点,则计数加1
if (root->left && root->right) {
return 1 + countDoubleBranches(root->left) + countDoubleBranches(root->right);
} else {
// 否则,如果只有一个子节点或者没有子节点,则继续递归检查其子节点
return countDoubleBranches(root->left) + countDoubleBranches(root->right);
}
}
// 示例:
int main() {
// 初始化二叉树结构
TreeNode* root = ...;
printf("双分支节点总数: %d\n", countDoubleBranches(root));
return 0;
}
```
在这个递归函数`countDoubleBranches`中,首先判断当前节点是否为空,然后根据节点是否有左右子节点分别处理。如果存在两个非空子节点,说明它是一个双分支节点,计数加1,并继续递归遍历其子节点。
阅读全文