题目:已知二叉树,找出二叉树中给定两个结点的最近公共祖先
思想:遍历二叉树,利用栈保存结点,然后对栈进行查找
代码展示:
void findWay(BiTree T,Stack &S,int x,int &finish)
{
int e;
if(T==NULL || finish==1)
{
return ;
}
Push(S,T->data);
if(T->data==x)
{
finish = 1;
}
findWay(T->lchild,S,x,finish);
findWay(T->rchild,S,x,finish);
if(finish!=1)
{
Pop(S,e);
}
}
void lowestCommonAncestor(BiTree T,Stack S1,Stack S2,int x1,int x2,int finish1,int finish2)
{
findWay(T,S1,x1,finish1);
findWay(T,S2,x2,finish2);
PrintStack(S1);
PrintStack(S2);
for(int i=0; i<=S1.top; i++)
{
if(S1.data[i]!=S2.data[i])
{
printf("最近公共祖先是:%d",S1.data[i-1]);
break;
}
}
}