
这个算法功能什么啊,有没有人帮我解惑,非常感谢。不要求有过程,有答案描述就可以了。
求二叉树的前序遍历产生的字符序列的第k个值,此算法不是以递归写法而是以迭代写法写出的
/*
* 前序遍历是按照: 左 中 右的顺序进行遍历的
* 给定二叉树以及序号k
*/
ElemType Unknown(BiTNode *T, int k) {
BiTNode *Stack[MaxSize], *p;
int top = -1, n = 0;
p = T;
while (top > - 1 || p != NULL) {
/*
* 遍历左子树(左)
* 走到树的最左下角,第一个没有左孩子节点的节点
* 期间经过的节点入栈,待当前子树遍历完成后相当于之前入栈节点的左子树遍历完成
*/
while (p != NULL) {
top++;
Stack[top] = p;
p = p->lchild;
}
if (top > - 1) {
p = Stack[top]; //遍历根节点(中)
top--;
n++;
if (n == k)
return p->data; //前序序列第k个节点,返回其值
p = p->rchild; //遍历右子树(右)
}
}
return '#';//遍历到头,不够k个节点,k取值过大,返回类似空标记
}