题目:
思路一:
采用二叉树的性质来解决这个题!
对任何一颗二叉树,度为0的结点数永远比度为2的结点数多一个
代码一:
#include<iostream>
using namespace std;
typedef struct BinaryTree
{
char data;
struct BinaryTree* left;
struct BinaryTree* right;
}BT;
void BinaryTreeCreate(BT*& ps)//二叉树创建
{
char a;
cin >> a;
if (a == '#')
ps = NULL;
else
{
ps = (BT*)malloc(sizeof(BT));
ps->data = a;
BinaryTreeCreate(ps->left);
BinaryTreeCreate(ps->right);
}
}
//求叶子结点个数
int BinaryTreeLeafSize(BT* ps)
{
if (ps == NULL)
return 0;
if (ps->left == NULL && ps->right == NULL)
return 1;
return BinaryTreeLeafSize(ps->left) + BinaryTreeLeafSize(ps->right);
}
int main()
{
BT* tree;
BinaryTreeCreate(tree);
if (BinaryTreeLeafSize(tree) == 0)//如果叶结点数为0,那么直接打印0
{
printf("0");
}
else
{
printf("%d", BinaryTreeLeafSize(tree) - 1);//如果叶结点不为0,那么度为2的结点为度为0的结点-1
}
return 0;
}
思路二:
定义一个全局变量Count来记录度为2的结点数,注意这里count定义的时候不要写成了小写的形式,因为std,标准C++库里面也定义了count变量,否则会出现重定义的情况造成我们自己定义的count和库里面的重复。
代码:
#include<iostream>
using namespace std;
typedef struct BinaryTree
{
char data;
struct BinaryTree* left;
struct BinaryTree* right;
}BT;
void BinaryTreeCreate(BT*& ps)//二叉树创建
{
char a;
cin >> a;
if (a == '#')
ps = NULL;
else
{
ps = (BT*)malloc(sizeof(BT));
ps->data = a;
BinaryTreeCreate(ps->left);
BinaryTreeCreate(ps->right);
}
}
//求度为2的结点的个数
int Count = 0;//定义一个全局变量Count
int BinaryTreeSize(BT* ps)
{
if (ps != NULL)//父节点不为空时才if语句
{
if (ps->left != NULL && ps->right != NULL)//左右结点都不为空则全局变量count++一下
{
Count++;
}
BinaryTreeSize(ps->left);
BinaryTreeSize(ps->right);//去迭代左右子树
}
}
int main()
{
BT* tree;
BinaryTreeCreate(tree);
BinaryTreeSize(tree);
printf("%d", Count);
return 0;
}