void InOrder(BiTree T){ if(T != NULL){ InOrder(T->lchild); visit(T); InOrder(T->rchild); } }
// 中序遍历模板 void InOrderNonrecursion(BTNode *bt){ if(bt != NULL){ BTNode *Stack[maxSize]; // 初始化栈 int top = -1; BTNode *p; p = bt; while(top != -1 || p != NULL){ // 空栈而且子树遍历完结束循环 while(p != NULL){ // 左孩子不为空,左孩子进栈,一直到左孩子为空 Stack[++top] = p; p = p->lchild; } if(top != -1){ // 若堆栈不空,出栈并输出出栈结点,访问节点,将p指向右孩子 p = Stack[top--]; Visit(p); p = p->rchild; } } } }
原文:https://www.cnblogs.com/YC-L/p/12094679.html