33,028
社区成员
发帖
与我相关
我的任务
分享#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_TREE_SIZE 100
typedef int TElemType;
typedef struct
{
TElemType data;
int parent; /* 双亲位置域 */
}PTNode;
typedef struct
{
PTNode nodes[MAX_TREE_SIZE];
int n; /* 结点数 */
}PTree;
int find(PTree* nds,int node1,int node2){
PTNode a,b;
char* n2path;
int p;
if(node1==node2) return node1;
a=nds->nodes[node1];
b=nds->nodes[node2];
if(a.parent==node2||node2==0) return node2;
if(b.parent==node1||node1==0) return node1;
n2path=(char*)malloc(sizeof(char)*MAX_TREE_SIZE);
memset(n2path,0,sizeof(char)*MAX_TREE_SIZE);
n2path[node2]=1;
n2path[b.parent]=1;
while(b.parent!=0){
b=nds->nodes[b.parent];
n2path[b.parent]=1;
}
p=node1;
while(1){
if(n2path[p]==1){
free(n2path);return p;
}
p=a.parent;
a=nds->nodes[a.parent];
}
}
int main(){
PTree t;
int i,j;
t.n=9;
t.nodes[0].parent=0;
t.nodes[1].parent=0;
t.nodes[2].parent=0;
t.nodes[3].parent=1;
t.nodes[4].parent=1;
t.nodes[5].parent=2;
t.nodes[6].parent=2;
t.nodes[7].parent=3;
t.nodes[8].parent=3;
for(i=0;i<9;i++) for(j=0;j<9;j++) printf("%d,%d=>%d\n",i,j,find(&t,i,j));
return 0;
}#include <stdio.h>
#include <stdlib.h>
#define MAX_TREE_SIZE 100
typedef int TElemType;
typedef struct
{
TElemType data;
int parent; /* 双亲位置域 */
}PTNode;
typedef struct
{
PTNode nodes[MAX_TREE_SIZE];
int n; /* 结点数 */
}PTree;
int find(PTree* nds,int node1,int node2){
PTNode a,b;
int i,k;
int* n2path;
if(node1==node2) return node1;
a=nds->nodes[node1];
b=nds->nodes[node2];
if(a.parent==node2||node2==0) return node2;
if(b.parent==node1||node1==0) return node1;
n2path=(int*)malloc(sizeof(int)*nds->n);
k=0;n2path[k]=node2;
k++;n2path[k]=b.parent;
while(b.parent!=0){
b=nds->nodes[b.parent];
k++;n2path[k]=b.parent;
}
while(1){
for(i=0;i<=k;i++){
if(a.parent==n2path[i]){
free(n2path);return a.parent;
}
}
a=nds->nodes[a.parent];
}
}
int main(){
PTree t;
t.n=9;
t.nodes[0].parent=0;
t.nodes[1].parent=0;
t.nodes[2].parent=0;
t.nodes[3].parent=1;
t.nodes[4].parent=1;
t.nodes[5].parent=2;
t.nodes[6].parent=2;
t.nodes[7].parent=3;
t.nodes[8].parent=3;
printf("%d\n",find(&t,7,4));
return 0;
}PTNode PTLCA(PTNode A, PTNode B, PTree T)
{
int Aa_index = A.parent;
int Ba_index = B.parent;
while ( Aa_index != Ba_index)
{
PTNode AaNode,BaNode;
AaNode = PTree.nodes[Aa.index];
BaNode = PTree.nodes[Ba.index];
Aa.index = AaNode.parent;
Ba.index = BaNode.parent;
}
return PTree.nodes[Aa.index];
}