笛卡爾樹是一種特殊的二叉樹,其結點包含兩個關鍵字k1和k2。首先笛卡爾樹是關於k1的二叉搜尋樹,即結點左子樹的所有k1值都比該結點的k1值小,右子樹則大。其次所有結點的k2關鍵字滿足優先佇列(不妨設為最小堆)的順序要求,即該結點的k2值比其子樹中所有結點的k2值小。給定一棵二叉樹,請判斷該樹是否笛卡爾樹。
輸入首先給出正整數n(≤1000),為樹中結點的個數。隨後n行,每行給出乙個結點的資訊,包括:結點的k1值、k2值、左孩子結點編號、右孩子結點編號。設結點從0~(n-1)順序編號。若某結點不存在孩子結點,則該位置給出−。
輸出yes
如果該樹是一棵笛卡爾樹;否則輸出no
。
6
8 27 5 1
9 40 -1 -1
10 20 0 3
12 21 -1 4
15 22 -1 -1
5 35 -1 -1
yes
6
8 27 5 1
9 40 -1 -1
10 20 0 3
12 11 -1 4
15 22 -1 -1
50 35 -1 -1
no
#include
#include
#include
int pre[1010];
struct bstq[1010];
int flag;
void judge(int num)
judge(left);
} if(q[num].right!=-1)
judge(right);
} }
int bb[1010],aa[1010];
int num_b;
void inorder(int num)
int main()
int root;
for(int i=0;i}
flag=1;
judge(root);
num_b=0;
inorder(root);
for(int i=0;i}
} for(int i=0;i}
if(flag)
puts("yes");
else
puts("no");
return 0;
}
5 31 笛卡爾樹 25分
5 31 笛卡爾樹 25分 笛卡爾樹是一種特殊的二叉樹,其結點包含兩個關鍵字k1和k2。首先笛卡爾樹是關於k1的二叉搜尋樹,即結點左子樹的所有k1值都比該結點的k1值小,右子樹則大。其次所有結點的k2關鍵字滿足優先佇列 不妨設為最小堆 的順序要求,即該結點的k2值比其子樹中所有結點的k2值小。給定一...
7 4 笛卡爾樹 25分
笛卡爾樹是一種特殊的二叉樹,其結點包含兩個關鍵字k1和k2。首先笛卡爾樹是關於k1的二叉搜尋樹,即結點左子樹的所有k1值都比該結點的k1值小,右子樹則大。其次所有結點的k2關鍵字滿足優先佇列 不妨設為最小堆 的順序要求,即該結點的k2值比其子樹中所有結點的k2值小。給定一棵二叉樹,請判斷該樹是否笛卡...
7 31 笛卡爾樹 25分
笛卡爾樹是一種特殊的二叉樹,其結點包含兩個關鍵字k1和k2。首先笛卡爾樹是關於k1的二叉搜尋樹,即結點左子樹的所有k1值都比該結點的k1值小,右子樹則大。其次所有結點的k2關鍵字滿足優先佇列 不妨設為最小堆 的順序要求,即該結點的k2值比其子樹中所有結點的k2值小。給定一棵二叉樹,請判斷該樹是否笛卡...