二叉树的顺序存储结构
#define MAX_TREE_SIZE 100
typedef int SqBiTree[MAX_TREE_SIZE];
SqBiTree bt;
在顺序结构中寻找i和j的最近共同祖先
#include<cstdio>
//二叉树的顺序存储结构
#define MAX_TREE_SIZE 100
typedef int SqBiTree[MAX_TREE_SIZE];
SqBiTree bt;
//在顺序结构中寻找i和j的最近共同祖先
void Comm_Ancester(SqBiTree bt, int i, int j){
int a = i, b = j;
if(bt[i] == 0){
printf("编号为%d的结点不存在!\n", i);
return;
}
if(bt[j] == 0){
printf("编号为%d的结点不存在!\n", j);
return;
}
while(i != j){//谁大谁往上跳一层再比,直到相等
if(i > j)
i /= 2;
else
j /= 2;
}
printf("编号为%d的结点和编号为%d的结点的最近公共祖先的结点编号为%d,其值为%d\n", a, b, i, bt[i]);
}
int main()
{
int bt[] = {-1, 1, 2,3, 4,5,6,7, 8,0,10,0,0,0,0,0, 0,0,0,0};//层次序列
/*
1
/ \
2 3
/ \ / \
4 5 6 7
/ \ / \ / \ / \
8 0 10 0 0 0 0 0
/ \ / \
0 0 0 0
*/
//在上述顺序存储结构中寻找编号为i和j结点的最近共同祖先结点的编号和值
Comm_Ancester(bt, 2, 3);
Comm_Ancester(bt, 4, 5);
Comm_Ancester(bt, 4, 6);
Comm_Ancester(bt, 8, 10);
/*
编号为2的结点和编号为3的结点的最近公共祖先的结点编号为1,其值为1
编号为4的结点和编号为5的结点的最近公共祖先的结点编号为2,其值为2
编号为4的结点和编号为6的结点的最近公共祖先的结点编号为1,其值为1
编号为8的结点和编号为10的结点的最近公共祖先的结点编号为2,其值为2
*/
return 0;
}