0
点赞
收藏
分享

微信扫一扫

数据结构之SWUSTOJ975: 统计利用先序遍历创建的二叉树的度为2的结点个数

清冷的蓝天天 2022-04-16 阅读 65
算法

题目:

思路一:

对任何一颗二叉树,度为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;
}

 

思路二:

代码:

#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;
}
举报

相关推荐

0 条评论