#include <stdio.h>
#include <stdlib.h>
// 定义树的节点结构体
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
};
// 计算树的单节点个数
int countUnivalNodes(struct TreeNode* root) {
if (root == NULL) {
return 0;
}
int leftCount = countUnivalNodes(root->left); // 递归计算左子树单节点个数
int rightCount = countUnivalNodes(root->right); // 递归计算右子树单节点个数
// 如果当前节点的左子树和右子树单节点个数不同,则当前节点不是单节点节点
if (leftCount != rightCount) {
return leftCount + rightCount + 1;
}
return leftCount; // 当前节点的左子树和右子树单节点个数相同,则当前节点是单节点节点,返回左子树单节点个数即可
}
int main() {
// 构造一棵测试用的树
struct TreeNode *root = (struct TreeNode*)malloc(sizeof(struct TreeNode));
root->val = 1;
root->left = (struct TreeNode*)malloc(sizeof(struct TreeNode));
root->left->val = 2;
root->left->left = NULL;
root->left->right = NULL;
root->right = (struct TreeNode*)malloc(sizeof(struct TreeNode));
root->right->val = 3;
root->right->left = NULL;
root->right->right = NULL;
// 计算树的单节点个数并输出结果
int count = countUnivalNodes(root);
printf("The number of unival nodes in the tree is %d.\n", count);
return 0;
}