SWUST OJ#982( 输出利用二叉树存储的普通树的度)

本文介绍了如何将普通树转化为二叉树,并通过先序遍历创建二叉树的C++代码。关键在于理解转化规则:根节点无右孩子,左孩子为左子树,右孩子为兄弟节点。提供的代码用于计算树的最大度数,但当根节点有右孩子时,表示不是正确的二叉树表示。
摘要由CSDN通过智能技术生成

目录

前言

题目

数据结构代码

 🥂(❁´◡`❁)您的点赞➕评论➕收藏⭐是作者创作的最大动力🤞


前言

想要做好这个题目,首先得明白二叉树与树之间是如何转化的,这里博主在这里浅说一下树是如何转化成二叉树的,先将树的兄弟节点用线连接起来,父节点若与其孩子节点有连线,我们仅保留其与最左孩子的连线,将其他的连线全部抹去,最后把结果,摆正一下,就得到了二叉树,过程如下图所示:

所以我们可以发现由树转化成的二叉树有如下特点:

  • 根节点一定是没有右孩子的
  • 普通树转化成二叉树之后,其节点的左孩子仍然为左孩子
  • 二叉树的右孩子节点为普通树的兄弟节点

题目

数据结构代码

#include <algorithm>
#include <iostream>
using namespace std;
//定义二叉树
typedef struct Node
{
	char data;
	Node *Lchild, *Rchild;
} BT;
//用先序遍历创建二叉树
void Creater_BT(BT *&Root)
{
	char c;
	cin >> c;
	if (c == '#') Root = NULL;
	else
	{
		Root = (BT *)malloc(sizeof(Node));
		Root->data = c;
		Creater_BT(Root->Lchild);
		Creater_BT(Root->Rchild);
	}
}
//主体函数
int degree = 1, maxn = 0;
void Get_Degree(BT *&Root, int n)
{
	if (Root != NULL)
	{
		if (Root->Lchild != NULL) Get_Degree(Root->Lchild,1);
		if (Root->Rchild != NULL) Get_Degree(Root->Rchild, n + 1);
	}
	maxn = max(maxn, n);
}
int main()
{
	BT *Root;
	Creater_BT(Root);
	if (Root->Rchild == NULL)
	{
		Get_Degree(Root, degree);
		cout << maxn;
	}else cout << "ERROR"; //如果根节点有右孩子,则不是用二叉树存储的普通树
	return 0;
}

 🥂(❁´◡`❁)您的点赞➕评论➕收藏⭐是作者创作的最大动力🤞

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

deyong1024

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值