统计二叉树中具有度为1的结点数目 分数 c++
时间: 2024-03-16 10:42:56 浏览: 50
以下是 C++ 代码实现:
```c++
#include <iostream>
using namespace std;
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
int degree() {
int cnt = 0;
if (left != NULL) {
cnt++;
}
if (right != NULL) {
cnt++;
}
return cnt;
}
};
int countDegree1Nodes(TreeNode* root) {
if (root == NULL) {
return 0;
}
int left = countDegree1Nodes(root->left);
int right = countDegree1Nodes(root->right);
int degree = (root->left == NULL && root->right != NULL) || (root->left != NULL && root->right == NULL) || (root->left != NULL && root->right != NULL && root->degree() == 1) ? 1 : 0;
return left + right + degree;
}
int main() {
// 构造一棵二叉树
TreeNode* root = new TreeNode(1);
root->left = new TreeNode(2);
root->right = new TreeNode(3);
root->left->left = new TreeNode(4);
root->left->right = new TreeNode(5);
root->right->left = new TreeNode(6);
root->right->right = new TreeNode(7);
// 统计度为1的结点数目
cout << countDegree1Nodes(root) << endl; // 输出 2
return 0;
}
```
这段代码定义了一个 `TreeNode` 结构体,用于表示二叉树的结点。其中,`val` 表示结点的值,`left` 和 `right` 分别表示结点的左子树和右子树。`degree` 方法用于计算结点的度数。在 `countDegree1Nodes` 函数中,使用递归的方式统计左子树、右子树和当前结点中度数为1的结点数目,最后将它们加起来即可。
阅读全文