利用c++实现编写有关二叉树的递归算法:(2)统计二叉树中度为 2 的结点个数;
时间: 2024-11-20 15:37:42 浏览: 54
C++使用递归和非递归算法实现的二叉树叶子节点个数计算方法
5星 · 资源好评率100%
在C++中,你可以通过递归的方式来实现二叉树中度为2的节点计数。这里我们假设有一个简单的二叉树结构定义,每个节点都有左右子节点:
```cpp
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};
```
接下来,我们可以编写一个名为`countDegreeTwoNodes`的函数,它接受一个指向根节点的指针作为输入,递归地检查当前节点及其子节点,然后返回度为2的节点数量。
```cpp
int countDegreeTwoNodes(TreeNode* root) {
if (root == nullptr) return 0; // 空节点不计算
// 计算左子节点的度
int leftDegree = root->left ? 1 + countDegreeTwoNodes(root->left) : 0;
// 计算右子节点的度
int rightDegree = root->right ? 1 + countDegreeTwoNodes(root->right) : 0;
// 如果节点的度为2,则加1到总计数
if (leftDegree == 1 && rightDegree == 1) {
return 1 + countDegreeTwoNodes(root->left->right); // 递归查找右子树是否有另一个度为1的节点
} else {
return leftDegree + rightDegree; // 否则直接返回两个子节点的度之和
}
}
```
这个函数首先检查当前节点是否为空,如果为空就返回0。接着,它递归地计算左子节点和右子节点的度,并在条件满足时加上当前节点(度为2)。最后,返回所有符合条件的节点数量。
阅读全文