对一个题目有感而发( 顺序存储的二叉树的最近的公共祖先问题)链接如下:
https://pintia.cn/problem-sets/1369132930181685248/problems/1369133002684424203
看到大佬用非常巧妙的一个方法写的找公共祖先的方法:
#include<stdio.h>
int a[1001];
int find(int x,int y)
{
if(x>y)
return find(x/2,y);//除以2很奇妙,
//除以2总是得到它的父亲节点。
else if(x<y)
return find(x,y/2);
else return x;
//递归函数之 return +递归函数。
}
int main()
{
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
int x,y;
scanf("%d %d",&x,&y);
if(a[x]==0)
{
printf("ERROR: T[%d] is NULL",x);
return 0;
}
if(a[y]==0)
{
printf("ERROR: T[%d] is NULL",y);
return 0;
}
// if(a[1])
printf("%d %d",find(x,y),a[find(x,y)]);
}
1;编号除以2都是它的父亲节点的编号。
2:return+dfs;的进一步理解(由于本人比较菜)
贴上大佬原版博客链接:
https://blog.csdn.net/qq_45745322/article/details/109786872