这似乎是树部分最简单的题
#include <iostream>
using namespace std;
int main() {
int n, i, j, T[1001] = { 0 };
cin >> n;
for (int i = 1; i <= n; ++i)
cin >> T[i];
cin >> i >> j;
if (T[i] == 0 || T[j] == 0)
cout << "ERROR: T[" << (T[i] == 0 ? i : j) << "] is NULL";
else {
while (i != j) {
while (i > j) i /= 2;
while (i < j) j /= 2;
}
cout << i << " " << T[i];
}
return 0;
}
#include<stdio.h>
int main()
{
int n;
int SqBiTree[1024];
int n1,n2;
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&SqBiTree[i]);
scanf("%d%d",&n1,&n2);
if(SqBiTree[n1]==0||SqBiTree[n2]==0)
{
if(SqBiTree[n1]==0)
printf("ERROR: T[%d] is NULL",n1);
else
printf("ERROR: T[%d] is NULL",n2);
}
else
{
if(n1>n2)
{
int temp=n1;
n1=n2;
n2=temp;
}
int p1,p2;
for(int i=n1;i>0;i=i/2)
{
for(int j=n2;j>=i;j=j/2)
{
if(SqBiTree[i]==SqBiTree[j])
{
p1=i;
p2=SqBiTree[i];
goto loop;
}
}
}
loop:printf("%d %d",p1,p2);
}
return 0;
}