題目背景
勤奮又善於思考的小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 作者 陳越給定一棵二叉樹的中序遍歷和前序遍歷,請你先將樹做個鏡面反轉,再輸出反轉後的層序遍歷的序列。所謂鏡面反轉,是指將所有非葉結點的左右孩子對換。這裡假設鍵值都是互不相等的正整數。輸入格式 輸...