算法思想:后序遍历非递归算法。当访问到x节点时,栈中所有元素都是祖先,依次出栈
后序遍历非递归:
1.从根节点开始非空则进栈,一直进行到最左叶节点(仍然进栈,其下一步为2);
2.若遇到空节点,退栈,访问,并用r指针标记最新访问节点。
void Ancestor(btree t,elemtype k){
initstack(s); //初始化栈
btnode *p=t,r=null; //r记录最新访问节点
while(p||!empty(s)){
if(p){ //走到最左边(未必是叶节点)
push(s,p);//进栈
p=p->lchild;
}