基本思路:
1. 开始根节点入栈
2. 循环执行如下操作:如果栈顶结点左孩子存在,则左孩子入栈,如果不存在,则出栈并输出栈顶结点,然后检查其右孩子是否存在,如果存在则右孩子入栈
3. 当栈空且遍历指针为空时算法结束
void inorderNonrecursion(BTNode *bt) {
if (bt != NULL) {
BTNode *Stack[maxsize];
int top = -1;
BTNode *p;
p = bt;
while (top != -1 || p != NULL) {
//注意当根结点访问后栈就空了,但如果有右子树,就还没有访问,此时p非空
while (p != NULL) {
Stack[++top] = p;
p = p->lchild;
}
if (top != -1) {
p = Stack[top--];
visit(p);
p = p->rchild;
}
}
}
}
7068

被折叠的 条评论
为什么被折叠?



