pascal題 給出二叉樹,輸出它的最大寬度和高度

2022-10-11 13:50:05 字數 3175 閱讀 7959

1樓:匿名使用者

var a:array[1..1000]of boolean;

b:array[1..1000]of longint;

n,i,j,p,q,max,l,r:longint;

begin

readln(n);

fillchar(a,sizeof(a),false);

a[1]:=true; b[1]:=1;

for i:=1 to n do

begin

readln(p,q);

if p<>0 then

begin

b[p]:=b[i]*2;

a[b[p]]:=true;

end;

if q<>0 then

begin

b[q]:=b[i]*2+1;

a[b[q]]:=true;

end;

end;

q:=0; max:=0;

l:=0; r:=0;

repeat

p:=0; //p為當前層的節點數

q:=q+1; //q為層數

l:=r+1;

r:=l*2-1;

for i:=l to r do

if a[i] then p:=p+1;

if p>max then max:=p;

until p=0;

writeln(max,' ',q-1); //由於會多掃瞄一層,所以q要減1

a:array[1..65536]of boolean;

b:array[1..65536]of longint;

n,i,j,p,q,max,l,r:longint;

begin

readln(n);

fillchar(a,sizeof(a),false);

a[1]:=true; b[1]:=1;

for i:=1 to n do

begin

readln(p,q);

if p<>0 then

begin

b[p]:=b[i]*2;

a[b[p]]:=true;

end;

if q<>0 then

begin

b[q]:=b[i]*2+1;

a[b[q]]:=true;

end;

end;

q:=0; max:=0;

l:=0; r:=0;

repeat

p:=0; //p為當前層的節點數

q:=q+1; //q為層數

l:=r+1;

r:=l*2-1;

for i:=l to r do

if a[i] then p:=p+1;

if p>max then max:=p;

until p=0;

writeln(max,' ',q-1); //由於會多掃瞄一層,所以q要減1

end.

可以借鑑一下

2樓:逍遙遊

#include

#include

#include

using namespace std;

vector< pair< int, int > > vii;

vector< int > vi;

void dfs( int i = 0, int depth = 0 )

int width( )

int height( int n = 0 )int main( )

cout << width( ) << ' ' << height( );}

二叉樹的最大高度和最小高度

給一些程式填空題,pascal的

二叉樹寬度是什麼?

3樓:匿名使用者

寬度:節點的葉子數

深度:節點的層數

演算法上有所謂的"寬度優先演算法"和"深度優先演算法"

二叉樹的寬度定義為具有最多結點數的層中包含的結點數。

比如上圖中,

第1層有1個節點,

第2層有2個節點,

第3層有4個節點,

第4層有1個節點,

可知,第3層的結點數最多

所以這棵二叉樹的寬度就是4

4樓:

要求二叉樹的寬度的話,則可根據樹的高度設定乙個陣列temp。temp[i]用於存放第i層上的結點數(即寬度)。在訪問結點時,把相應計算該結點下一層的孩子數並存入相應陣列元素中,遍歷左子樹後向上返回一層計算右子樹的寬度,並取出最大的乙個陣列元素作為樹的寬度。

#define m 10 //假設二叉樹最多的層數int width(bintree t)

else

if(maxlchild);//遍歷左子樹i--; //往上退一層

width(t->rchild);//遍歷右子樹} return max;

}//演算法結束

希望可以給你幫助!

5樓:樂正涵柳

1:設定兩個變數left,right。分別記錄「以根節點為基準的偏離值」,再設定maxleft,和maxright記錄遍歷過程中遇到的最大值。

2:最後寬度就算兩個值相加。

6樓:撿到的幸福

首先畫出二叉樹的層次圖

然後取個數最多的一層就是了

編寫計算二叉樹最大寬度的演算法

7樓:藯藍de_楓葉

分析:二叉樹是遞迴定義的,其計算二叉樹的高度可以採取遞迴方式 int height(btre bt)//求二叉樹bt的深度 }分析:求二叉樹的最大寬度可採用層次遍歷的方法,記下各層結點數,每層遍歷完畢,若結點數大於原先最大寬度,則修改最大寬度。

int width(bitree bt)//求二叉樹bt的最大寬度//if }//while return (maxw); }//結束width

按照二叉樹的定義,具有結點的二叉樹有(C

選b5種 兩層的有一種 三層的第一層是根,第二層兩種情況,第三層兩種情況。1 2 2 4所以1 4 5種 樓上是否明白二叉樹形態 如果不考慮結點資料資訊的組合情況,具有3個結點的二叉樹有5種形態,其中,只有一棵二叉樹具有度為2的結點 即為一棵度為2的二叉樹 其餘四棵二叉樹的度均為1。因此答案為5 按...

先序線索二叉樹的遍歷,後序線索二叉樹怎麼畫啊

include include typedef enum pointertag 指標標誌 typedef char datatype typedef struct bithretreebithretree bithretree pre 全域性變數,用於二叉樹的線索化 bithretree creat...

編寫演算法,判斷一顆二叉樹是否是完全二叉樹

可以檢驗一棵樹中有0個兒子,1個兒子,2個兒子的節點數a,b,c。則應滿足b 0,a c 1 include include define max 100 typedef struct node bitnode,bitree void createbitree bitree bt bool full...