题意
判断一个完全二叉树是不是堆
代码
#include <bits/stdc++.h>
using namespace std;
const int N = 1e3 + 10;
typedef long long ll;
struct node{
int data;
node *left, *right;
node(){}
node(int a):data(a){left = right = NULL;}
}arr[N];
int order;
vector<int> cur;
vector<vector<int> > res;
void dfs(node* root)
{
if (root)
{
cur.push_back(root->data);
if (!root->left && !root->right)
res.push_back(cur);
dfs(root->right);
dfs(root->left);
cur.pop_back();
}
}
int main(void)
{
int i, j, temp, cnt = 0;
int n;
scanf("%d", &n);
queue<node*> q;
scanf("%d", &temp);
node *root = new node(temp);
q.push(root);
while(++cnt < n)
{
node *front = q.front();
q.pop();
scanf("%d", &temp);
front->left = new node(temp);
q.push(front->left);
if (++cnt == n) break;
scanf("%d", &temp);
front->right = new node(temp);
q.push(front->right);
}
bool flag = true;
order = root->data > root->left->data ;
dfs(root);
for (i = 0; i < res.size(); i++)
{
for (j = 0; j < res[i].size(); j++)
{
if (j != (int)res[i].size() - 1)
{
if (order != (res[i][j] > res[i][j+1]))
flag = false;
printf("%d ", res[i][j]);
}
else
printf("%d\n", res[i][j]);
}
}
if (flag)
if (order)
printf("Max Heap");
else
printf("Min Heap");
else
printf("Not Heap");
}
本文介绍了一种算法,用于判断一个给定的完全二叉树是否构成最大堆或最小堆。通过递归深度优先搜索遍历树的每个节点,并比较节点与其子节点的值,以确定树是否满足堆的性质。
453

被折叠的 条评论
为什么被折叠?



