0
点赞
收藏
分享

微信扫一扫

每日一练:顺序存储的二叉树的最近的公共祖先问题

这似乎是树部分最简单的题

#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;
}
举报

相关推荐

0 条评论