小L的二叉樹

2021-07-22 22:06:59 字數 1441 閱讀 4004

題目背景

勤奮又善於思考的小l接觸了資訊學競賽,開始的學習十分順利。但是,小l對資料結構的掌握實在十分渣渣。

所以,小l當時卡在了二叉樹。

題目描述

在電腦科學中,二叉樹是每個結點最多有兩個子結點的有序樹。通常子結點被稱作「左孩子」和「右孩子」。二叉樹被用作二叉搜尋樹和二叉堆。隨後他又和他人討論起了二叉搜尋樹。什麼是二叉搜尋樹呢?二叉搜尋樹首先是一棵二叉樹。設key[p]表示結點p上的數值。對於其中的每個結點p,若其存在左孩子lch,則key[p]>key[lch];若其存在右孩子rch,則key[p]

var

n,i,j,k,p,x,y:longint;

a,b,d:array[0..100000] of longint;

f:array[0..100000,1..2] of longint;

procedure

dg(t:longint);

begin

if (f[t,1]=0)and(f[t,2]=0) then

begin

inc(b[0]);

b[b[0]]:=a[t];

exit;

end;

if f[t,1]<>0

then dg(f[t,1]);

inc(b[0]);

b[b[0]]:=a[t];

if f[t,2]<>0

then dg(f[t,2]);

end;

function

gd(x:longint):longint;

var l,r,mid:longint;

begin

l:=1;

r:=k;

while l<=r do

begin

mid:=(l+r) div

2; if x>=d[mid] then l:=mid+1

else r:=mid-1;

end;

exit(l);

end;

begin

readln(n);

for i:=1

to n do

read(a[i]);

readln;

for i:=1

to n-1

dobegin

readln(x,y);

f[x,y+1]:=i+1;

end;

dg(1);

for i:=1

to n do b[i]:=b[i]-i;

for i:=1

to n do

begin

p:=gd(b[i]);

d[p]:=b[i];

if kthen k:=p;

end;

write(n-k);

end.

L2 011 玩轉二叉樹 二叉樹

題目傳送門 給定一棵二叉樹的中序遍歷和前序遍歷,請你先將樹做個鏡面反轉,再輸出反轉後的層序遍歷的序列。所謂鏡面反轉,是指將所有非葉結點的左右孩子對換。這裡假設鍵值都是互不相等的正整數。輸入第一行給出乙個正整數n 30 是二叉樹中結點的個數。第二行給出其中序遍歷序列。第三行給出其前序遍歷序列。數字間以...

L2 011 玩轉二叉樹 二叉樹的重建

l2 011.玩轉二叉樹 給定一棵二叉樹的中序遍歷和前序遍歷,請你先將樹做個鏡面反轉,再輸出反轉後的層序遍歷的序列。所謂鏡面反轉,是指將所有非葉結點的左右孩子對換。這裡假設鍵值都是互不相等的正整數。輸入格式 輸入第一行給出乙個正整數n 30 是二叉樹中結點的個數。第二行給出其中序遍歷序列。第三行給出...

L2 011 玩轉二叉樹(二叉樹的遍歷)

時間限制 400 ms 記憶體限制 65536 kb 長度限制 8000 b 判題程式 standard 作者 陳越給定一棵二叉樹的中序遍歷和前序遍歷,請你先將樹做個鏡面反轉,再輸出反轉後的層序遍歷的序列。所謂鏡面反轉,是指將所有非葉結點的左右孩子對換。這裡假設鍵值都是互不相等的正整數。輸入格式 輸...