PAT A급 A1155 힙 패스(30점)
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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
PAT A급 1005 Spell It Right(20점) 문제 전달1005 Spell It Right(20분) Time limit: 400 ms Memory limit: 64 MB Source limit: 16 KB Given a non-negative integer $N$, yo...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.