順次格納されるバイナリツリーにiとjの番号が付けられた2つのノードがあると仮定して、それらの最も近い共通の祖先ノードの数と値を見つけるアルゴリズムを設計してください。
入力形式:
最初の行を入力して、順次ストレージの最大容量である正の整数n(≤1000)を指定します。2番目の行を入力して、スペースで区切られたn個の非負の整数を指定します。ここで、0はバイナリツリーの空のノードを表します(最初のノードが0の場合、空のツリーを表します)。3番目の行はノード番号iとjのペアを示します。
入力が二分木に正しく対応し、1≤i、j≤nであることを確認してください。
出力フォーマット:
IまたはJに相当する空のノードに、出力場合T [X]がNULLである:ERROR xはエラーが最初に発見されたIまたはJの数であり、そうでない場合、出力番号がiおよびj一行ザで2つのノードの最も近い共通の祖先ノードの数と値はスペースで区切られます。
質問のアイデア:
二分木の各ノード(ルートノードを除く)の親ノードの添え字は、i / 2として順次格納されます。コードをアップロード
#include<iostream>
using namespace std;
int main()
{
int ar[1001] = {
0};
int n;
cin >> n;
for (int i = 1; i <= n; i++)
cin >> ar[i];
int a, b;
cin >> a >> b;
if (!ar[a])
printf("ERROR: T[%d] is NULL", a);
else if (!ar[b])
printf("ERROR: T[%d] is NULL", b);
else
{
while (a != b)
{
if (a > b) a /= 2;
else b /= 2;
}
cout << a << " " << ar[a];
}
return 0;
}