日々精進

aikoと旅行とプログラミング

【AOJ ALDS1_9】A: Heaps - Complete Binary Tree

問題

ヒープ 完全二分木 | アルゴリズムとデータ構造 | Aizu Online Judge

方針

  • 完全二分木とは, すべての葉が同じ深さであり内部節点の次数が2であるような二分木である.
  • 節点番号がiであるとき, 親はi/2, 左の子ノードは2i, 右の子ノードは2i+1で求めることができる.

コード

#include<iostream>

#define rep(i, n) REP(i, 0, n)
#define REP(i, a, n) for(int i = a ; i < (int)n ; i++)

using namespace std;

signed main(){
  int h;
  int A[251];
  cin >> h;
  for(int i = 1 ; i <= h ; i++){
    cin >> A[i];
  }

  for(int i = 1 ; i <= h ; i++){
    cout << "node " << i << ": key = " << A[i] << ", ";
    if(i/2 >= 1) cout << "parent key = " << A[i/2] <<  ", ";
    if(2 * i <= h) cout << "left key = " << A[2 * i] << ", ";
    if(2 * i + 1 <= h) cout << "right key = " << A[2 * i + 1] << ", ";
    cout << "\n";
  }
}