A1147
Description:
判断完全二叉树是大根堆、小根堆或不是堆,并且输出这棵树的后序遍历序列;
思路:
- 对于完全二叉树的任意节点i,其左右孩子节点为2*i和2*i+1(当首节点下标为1时);
- 初始化当前可能为大根堆、小根堆,判断过程中遇到破坏大(小)根堆的条件,则更新标志,,最终根据两个标志确定二叉树情况;
- 对于完全二叉树遍历时,养成从后往前判断的习惯,其一是避免了上界不确定是2i或是2i+1的问题,其二是i/2这样的写法较简洁,但是一定要注意首节点下标为1、遍历下界判断条件是i>1,如果i==1,此时i/2将访问0节点。
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include<algorithm>
#include<map>
#include<vector>
#include<queue>
using namespace std;
int m, n;
vector<int>ans, tree;
void postOrder