目录
🥂(❁´◡`❁)您的点赞➕评论➕收藏⭐是作者创作的最大动力🤞
前言
想要做好这个题目,首先得明白二叉树与树之间是如何转化的,这里博主在这里浅说一下树是如何转化成二叉树的,先将树的兄弟节点用线连接起来,父节点若与其孩子节点有连线,我们仅保留其与最左孩子的连线,将其他的连线全部抹去,最后把结果,摆正一下,就得到了二叉树,过程如下图所示:
所以我们可以发现由树转化成的二叉树有如下特点:
- 根节点一定是没有右孩子的
- 普通树转化成二叉树之后,其节点的左孩子仍然为左孩子
- 二叉树的右孩子节点为普通树的兄弟节点
题目
数据结构代码
#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;
}