在二叉树中找到结点x的所有祖先。
思想:利用先序遍历。如果T==x,则设置findnces=true。findnces=false时,访问结点,将结点入栈,递归访问左右子树,findnces依然为false,出栈。
代码:
BiTree ances[MaxSize];//定义栈
int i=0;//栈顶指针
bool findAnces=false;//指示是否找到
void findAllAncestor(BiTree T,BiTNode *x){
//树为空,或者找到x,不做任何操作
if(T==NULL||findAnces=true) return;
//找到x
if(T==x){
findAnces=true;
return;
}
//入栈
ances[i++]=T;
//递归处理左右子树
findAllAncestor(T->lchild,x);
findAllAncestor(T->rchild,x);
//出栈
//在孩子中找到x,则不需要出栈
//在孩子中没有找到x,则出栈
if(findAnces=false) i--;
}