本題考點:
笛卡爾樹是一種特殊的二叉樹,其結點包含兩個關鍵字k1和k2。首先笛卡爾樹是關於k1的二叉搜尋樹,即結點左子樹的所有k1值都比該結點的k1值小,右子樹則大。其次所有結點的k2關鍵字滿足優先佇列(不妨設為最小堆)的順序要求,即該結點的k2值比其子樹中所有結點的k2值小。給定一棵二叉樹,請判斷該樹是否笛卡爾樹。採用靜態樹儲存樹的資訊,同時記錄讀取樹的根結點資訊。輸入格式
輸入首先給出正整數n(≤1000),為樹中結點的個數。隨後n行,每行給出乙個結點的資訊,包括:結點的k1值、k2值、左孩子結點編號、右孩子結點編號。設結點從0~(n-1)順序編號。若某結點不存在孩子結點,則該位置給出−1。
輸出格式
輸出yes如果該樹是一棵笛卡爾樹;否則輸出no。
二叉搜尋樹的判定:
堆的判定
完整**如下:
#include
#include
using
namespace std;
const
int maxn =
1010
;struct node
;// 如果要要用 trees,需要定義無參的構造方法
node
(int _k1,
int _k2,
int _left,
int _right):k1
(_k1),k2
(_k2)
,left
(_left)
,right
(_right)
;} trees[maxn]
;int root;
bool isroot[maxn]
;vector<
int> orders;
bool
judgeheap
(int root)
;// 判斷是否是最小值堆
void
inorder
(int root)
intmain()
for(
int i =
0; i < n; i++)}
inorder
(root)
;bool istree =
true
;for
(int i =
0; i < n-
1; i++)}
if(istree &&
judgeheap
(root)
)printf
("yes");
else
printf
("no");
return0;
}bool
judgeheap
(int root)
PTA 7 31 笛卡爾樹(BST Heap)
本題考點 笛卡爾樹是一種特殊的二叉樹,其結點包含兩個關鍵字k1和k2。首先笛卡爾樹是關於k1的二叉搜尋樹,即結點左子樹的所有k1值都比該結點的k1值小,右子樹則大。其次所有結點的k2關鍵字滿足優先佇列 不妨設為最小堆 的順序要求,即該結點的k2值比其子樹中所有結點的k2值小。給定一棵二叉樹,請判斷該...
7 31 笛卡爾樹 25分
笛卡爾樹是一種特殊的二叉樹,其結點包含兩個關鍵字k1和k2。首先笛卡爾樹是關於k1的二叉搜尋樹,即結點左子樹的所有k1值都比該結點的k1值小,右子樹則大。其次所有結點的k2關鍵字滿足優先佇列 不妨設為最小堆 的順序要求,即該結點的k2值比其子樹中所有結點的k2值小。給定一棵二叉樹,請判斷該樹是否笛卡...
pat笛卡爾樹
笛卡爾樹是一種特殊的二叉樹,其結點包含兩個關鍵字k1和k2。首先笛卡爾樹是關於k1的二叉搜尋樹,即結點左子樹的所有k1值都比該結點的k1值小,右子樹則大。其次所有結點的k2關鍵字滿足優先佇列 不妨設為最小堆 的順序要求,即該結點的k2值比其子樹中所有結點的k2值小。給定一棵二叉樹,請判斷該樹是否笛卡...