PTA 7 31 笛卡爾樹(BST Heap)

2021-10-04 20:48:25 字數 1446 閱讀 4053

本題考點:

笛卡爾樹是一種特殊的二叉樹,其結點包含兩個關鍵字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值小。給定一棵二叉樹,請判斷該樹是否笛卡...