void findk(BiTree T,int k,int &value){ //递归判断
if(T!=null){ //非空才执行
k--; //每次k--代表又遍历一个元素
if(k==0) //直到k为0,则遍历到第k个元素
value=T->data;
else{
findk(T->lchild,k,value); //DLR中间找完找左子树,再右子树
findk(T->rchild,k,value);
}
}
}
void findk(BiTree T,int k,int &value){ //先序遍历非递归
InitStack(S); //用栈
BiTNode *p=T;
int count=0;
while(p||!IsEmpty(S)){ //每次遍历计数器都加1,直到=k则输出值
if(p){ //左子树全进栈
count++;
if(count==k)
value=p->data;
Push(S,p);
p=p->lchild;
}
else{ //左子树结束,出栈顶,指向栈顶右子树
Pop(S,p);
p=p->rchild;
}
}
}