注:一定要掌握层次遍历,课后题中很多都是在此基础上进行一些改造的。
二叉树的遍历 (非递归)
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);//右子树不空,则入队列
}
}