PAT A급 A1155 힙 패스(30점)

In computer science, a heap is a specialized tree-based data structure that satisfies the heap property: if P is a parent node of C, then the key (the value) of P is either greater than or equal to (in a max heap) or less than or equal to (in a min heap) the key of C. A common implementation of a heap is the binary heap, in which the tree is a complete binary tree. (Quoted from Wikipedia at https://en.wikipedia.org/wiki/Heap_(data_structure))
One thing for sure is that all the keys along any path from the root to a leaf in a max/min heap must be in non-increasing/non-decreasing order.
Your job is to check every path in a given complete binary tree, in order to tell if it is a heap or not.

Input Specification:


Each input file contains one test case. For each case, the first line gives a positive integer N (1int), which gives the level order traversal sequence of a complete binary tree.

Output Specification:


For each given tree, first print all the paths from the root to the leaves. Each path occupies a line, with all the numbers separated by a space, and no extra space at the beginning or the end of the line. The paths must be printed in the following order: for each node in the tree, all the paths in its right subtree must be printed before those in its left subtree.
Finally print in a line Max Heap if it is a max heap, or Min Heap for a min heap, or Not Heap if it is not a heap at all.

Sample Input 1:

8
98 72 86 60 65 12 23 50

Sample Output 1:

98 86 23
98 86 12
98 72 65
98 72 60 50
Max Heap

Sample Input 2:

8
8 38 25 58 52 82 70 60

Sample Output 2:

8 25 70
8 25 82
8 38 52
8 38 58 60
Min Heap

Sample Input 3:

8
10 28 15 12 34 9 8 56

Sample Output 3:

10 15 8
10 15 9
10 28 34
10 28 12 56
Not Heap

제목: 완전한 두 갈래 나무의 층차 서열을 보여 줍니다. 먼저 뿌리 노드에서 잎 노드까지의 모든 경로를 출력할 수 있지만 오른쪽 트리의 경로를 출력하고 왼쪽 트리의 경로를 출력해야 합니다.다음은 이 두 갈래 나무가 큰 무더기인지 작은 무더기인지 판단하거나 무더기가 아니라 대응 판단 결과를 출력하도록 하겠습니다. 
사고방식: 수조를 사용하여 이 두 갈래 나무를 저장하면 아래 표지 사이에 다음과 같은 관계가 있다. 현재 결점 아래 표지 i를 설정하면 왼쪽 아이는 2*i+1, 오른쪽 아이는 2*i+2를 저장한다. 아래 표지 간의 대응 관계에 따라 이 나무에 대해 DFS를 실행하지만 왼쪽 표지 나무의 방문 순서를 뒤바꾸고vectorpath 저장 경로의 노드를 사용하여 잎 결점(아래 표지>=n/2)에 닿을 때마다 path를 출력한다.최종적으로 훑어보면 뿌리 노드에서 잎 노드까지의 모든 경로를 출력할 수 있다.
다음은 이것이 완전히 두 갈래 나무가 쌓였는지 아닌지를 판단한다.큰 무더기에 대해 모든 노드가 현재의 결점을 만족시키는 것은 아버지 노드와 같은 성질보다 작다. 만약에 뿌리 노드를 제외한 모든 노드에 이런 성질이 있다면 큰 무더기이고 작은 무더기는 상반된다.둘 다 만족하지 않으면 쌓는 게 아니야.
참조 코드:
#include
#include
using namespace std;
int n,Heap[1010];
vector path;
int judge(){
	int flag=1;
	for(int i=n-1;i>0&&flag;i--){	// 
		if(Heap[i]>Heap[(i-1)/2])
			flag=0;
	}
	if(flag) return 1;
	flag=1;
	for(int i=n-1;i>0&&flag;i--){	// 
		if(Heap[i]=n) return;
	path.push_back(Heap[root]);
	if(root>=n/2){
		for(int i=0;i

좋은 웹페이지 즐겨찾기