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...