国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

求二叉樹的深度和寬

2019-11-08 01:40:43
字體:
來源:轉載
供稿:網友

Description

(1)根據教材中算法6.4所示的算法,按照給出的先序序列建立二叉鏈表表示的二叉樹(結點數不超過26)。(2)計算該二叉樹的繁茂程度。一顆二叉樹的繁茂程度為二叉樹的寬度與高度的乘積,二叉樹的寬度為各層節點數的最大值。

Input

包含多組測試數據。每組測試數據一行,給出二叉樹的先序遍歷序列(至少1個結點)。

Output

輸出二叉樹的繁茂程度。

Sample Input

ABC^^DE^G^^F^^^A^^AB^^C^^

Sample Output

1014分析:本題要求計算二叉樹的繁茂程度,也就是計算二叉樹寬度和深度的成績,進而簡化到求二叉樹的深度和寬度。二叉樹的深度比較好求,首先判斷樹是否為空,如果不為空,那么二叉樹的深度即為1+max(左子樹的深度,右子樹的深度)。二叉樹的寬度就要通過隊列來求了,對二叉樹進行層次遍歷,同一層的進隊,求出該層寬度,找出最大的。參考代碼:
#include<cstdio>#include<cstdlib>#include<cmath>#include<cstring>#include<string>#include<algorithm>#include<stack>#include<queue>#include<map>#include<iostream>using namespace std;typedef struct BiTNode{    char d;    struct BiTNode *l;    struct BiTNode *r;}*BiTree,BiTreeNode;char ch;bool flag;void CreatBiTree( BiTree &T)//創建二叉樹{    char tmp;    if( flag)        scanf("%c",&tmp);    else    {        tmp = ch;        flag = 1;    }    if( tmp == '^')        T = NULL;    else    {        T = new BiTreeNode;        T->d = tmp;        CreatBiTree(T->l);        CreatBiTree(T->r);    }}int getdepth( BiTree T)//獲取二叉樹的深度{    if( T == NULL)    {        //PRintf("t=null/n");        return 0;    }    else    {        //printf("tt/n");        int left = getdepth(T->l);        int right = getdepth(T->r);        return 1+max(left,right);    }}int getwidth( BiTree T)//求二叉樹的寬度{    if( T == NULL)        return 0;    queue<BiTree> q;    q.push(T);    int maxwidth = 1;    while( true)    {        int len = q.size();        if( len == 0)            break;        while( len > 0)        {            BiTree t = q.front();            q.pop();            len--;            if( t->l != NULL)                q.push( t->l);            if( t->r != NULL)                q.push( t->r);        }        if( q.size() > maxwidth)            maxwidth = q.size();    }    return maxwidth;}int main(){    while( ~scanf("%c",&ch))    {        if( ch == '/n')            continue;        BiTree T = NULL;        flag = 0;        CreatBiTree( T);        int a = getdepth( T);        int b = getwidth( T);        //printf("a = %d, b = %d/n",a,b);        printf("%d/n",a*b);    }    return 0;}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 孝昌县| 西吉县| 平原县| 丰原市| 深泽县| 磐石市| 开化县| 黑山县| 泰来县| 运城市| 昔阳县| 云阳县| 富宁县| 汝州市| 吴桥县| 菏泽市| 天台县| 汶川县| 宁陕县| 锡林浩特市| 友谊县| 东海县| 海安县| 双鸭山市| 永顺县| 古丈县| 邹城市| 长治市| 镇远县| 钟山县| 孝昌县| 富川| 郴州市| 淄博市| 和静县| 福建省| 平南县| 库车县| 河北区| 方山县| 邯郸市|