題目描述:
已知一棵二叉樹按順序存儲結構進行存儲,設計一個算法,求編号分别為i和j的兩個結點的最近的公共祖先結點的值
算法思想:
從1開始編号。
核心代碼:
#include <stdio.h>
#include <malloc.h>
#define MaxSize 13
typedef struct TNode
{
char data;
TNode* lchild;
TNode* rchild;
}TNode;
int find_public(TNode T[],int i,int j)//注意這裡不是TNode* &T
{
if(T[i].data!='#'&&T[j].data!='#')//還要判斷結點是否存在
{
while(i!=j)
{
if(i>j)
i=i/2;
else
j=j/2;
}
return i;
}
else
return 0;
}
int main()
{
TNode T[MaxSize];
for(int i=1;i<MaxSize;i++)//從數組下标1開始存儲
{
char c;
scanf("%c",&c);
T[i].data=c;
}
int k=find_public(T,4,10);
printf("%c",T[k].data);//測試資料:ABCDE####F#,輸出data:B
return 0;
}