这个是我在网上看到的挺不错的一个方法,和求那个最长路劲的方法是一样的
int flag=0; //定义一个全局变量来判断是否查找到了值
void PrintAncestors(BiTree *T,char x){
if(!T)
return;
if(T->data==x){
flag=1; //查询到值的时候 改变标志位
return;
}
if(flag==0)
PrintAncestors(T->lchild,x); //若没有查找到往节点的左侧查找
if(flag==0)
PrintAncestors(T->rchild,x);//若没有查找到往节点的右侧查找
if(flag==1)
visit(T);
}
int PrintAncestors2(BiTree *T,char x){
if(!T)
return 0;
if(T->data==x){
return 1;
}
//这个可以这样理解
//如果一颗二叉树他的左孩子有要查询的结点或者他的右孩子里面有要查询的结点那么该节点就是祖先结点
if(PrintAncestors2(T->lchild, x)||PrintAncestors2(T->rchild,x)){
visit(T);
return 1;
}else{
return 0;
}
}