Swust OJ982: 输出利用二叉树存储的普通树的度

Posted on 2020-04-12 00:00  Mikrokosmos  阅读(651)  评论(0)    收藏  举报

题目描述

普通树可转换成相应的二叉树(该二叉树的根结点一定缺少右儿子),反之亦然。故而可以根据相应的转换方法去统计某一二叉树对应的普通树的度。普通树的度为其结点儿子数的最大值。 输出利用二叉树存储的普通树的度.
输入
输入为接受键盘输入的由大写英文字符和"#"字符构成的一个字符串(用于创建对应的二叉树)。

输出

若表示的二叉树对应普通树,则该普通树的度;否则输出ERROR。

样例输入复制

AB#CD##E###

样例输出复制

3
知识点:普通树转换为二叉树
上图树的度即为3.

所以计算普通树的度——树的所有结点的度的最大值作为这棵树的度

 

故对于二叉树,计算出同一直线上的右结点的最大值即为普通树的度

算法:

 void Degree(Tree *&t,int n)
 {
     if(t!=NULL)
     {
         Degree(t->rchild,n+1);
         Degree(t->lchild,1);
     }
     if(max<n)
         max=n;
 }

完整代码:

#include<iostream>
#include<stdlib.h>
#include<stdio.h>
using namespace std;
int max=0;//Global variables
typedef struct node
{
    char data;
    struct node *lchild,*rchild;
 }Tree;
//先序遍历递归创建二叉树
 void CreateTree(Tree *&t)
 {
     char ch;
     cin>>ch;
     if(ch!='#')
     {
         t=(Tree*)malloc(sizeof(Tree));
         t->data=ch;
         CreateTree(t->lchild);
         CreateTree(t->rchild);
     }
     else
     t=NULL;    
 }
 //计算二叉树存储的普通树的度
 void Degree(Tree *&t,int n)
 {
     if(t!=NULL)
     {
         Degree(t->rchild,n+1);
         Degree(t->lchild,1);
     }
     if(max<n)
         max=n;
 }
int main() { Tree *t; CreateTree(t); int n=0; if(t->rchild==NULL) { Degree(t,n); cout<<max-1; } else cout<<"ERROR"; return 0; }

 

博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3