7 31 笛卡爾樹 25分

2021-10-24 10:43:10 字數 1385 閱讀 5983

笛卡爾樹是一種特殊的二叉樹,其結點包含兩個關鍵字k1和k2。首先笛卡爾樹是關於k1的二叉搜尋樹,即結點左子樹的所有k1值都比該結點的k1值小,右子樹則大。其次所有結點的k2關鍵字滿足優先佇列(不妨設為最小堆)的順序要求,即該結點的k2值比其子樹中所有結點的k2值小。給定一棵二叉樹,請判斷該樹是否笛卡爾樹。

輸入格式:

輸入首先給出正整數n(≤1000),為樹中結點的個數。隨後n行,每行給出乙個結點的資訊,包括:結點的k1值、k2值、左孩子結點編號、右孩子結點編號。設結點從0~(n-1)順序編號。若某結點不存在孩子結點,則該位置給出−1。

輸出格式:

輸出yes如果該樹是一棵笛卡爾樹;否則輸出no。

輸入樣例1:

6827

51940

-1-1

102003

1221-1

41522-

1-15

35-1-

1

輸出樣例1:

yes
輸入樣例2:

6827

51940

-1-1

102003

1211-1

41522-

1-150

35-1-

1

輸出樣例2:

no
#include

#include

#include

using

namespace std;

struct node

;vectortree;

vector<

int>v, v1;

int n, k1, k2, lc, rc, root =-1

, vis[

10001];

void

dfs(

int x)

intjudgek1()

intjudgek2()

return1;

}int

main()

);vis[lc]

=(lc ==-1

?0:1

);vis[rc]

=(rc ==-1

?0:1

);}while

(vis[

++root]);

cout <<

(judgek2()

&&judgek1()

?"yes"

:"no");

return0;

}

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值小。給定一棵二叉樹,請判斷該樹是否笛卡...

9 4 笛卡爾樹(25 分)

笛卡爾樹是一種特殊的二叉樹,其結點包含兩個關鍵字k1和k2。首先笛卡爾樹是關於k1的二叉搜尋樹,即結點左子樹的所有k1值都比該結點的k1值小,右子樹則大。其次所有結點的k2關鍵字滿足優先佇列 不妨設為最小堆 的順序要求,即該結點的k2值比其子樹中所有結點的k2值小。給定一棵二叉樹,請判斷該樹是否笛卡...