注:一定要掌握层次遍历,课后题中很多都是在此基础上进行一些改造的。
二叉树的遍历 (非递归)
 void InOrder2(BiTree T) {
 //二叉树中序遍历的非递归算法,需要借助一个栈
 InitStack(S); BiTree p = T; //初始化栈;p是遍历指针
 while (p||!IsEmpty(S)) { //栈不空或p不空时循环
 if § { //一路向左(
 Push(S,p); //当前节点入栈
 p = p->lchild;//左子树不空便继续往左走
 }
 else { //退栈,访问根结点,遍历右子树
 Pop(S,p); visit§; //退栈,访问根结点
 p = p->rchild; //再向右子树走
 }
 }
 }
二叉树的层次遍历
 void LevelOrder(BiTree T) {
 //层次遍历
 InitQueue(Q); //初始化辅助队列
 BiTree p;
 EnQueue(Q,T); //将根结点入队
 while (!IsEmpty(Q)) { //队列不空循环
 DeQueue(Q,p); //队头元素出队
 visit§; //访问当前p所指向结点
 if (p->lchild!=NULL)
 EnQueue(Q,p->lchild);//左子树不空,则入队列
 if (p->rchild!=NULL)
 EnQueue(Q,p->rchild);//右子树不空,则入队列
 }
 }










