注:一定要掌握层次遍历,课后题中很多都是在此基础上进行一些改造的。
二叉树的遍历 (非递归)
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);//右子树不空,则入队列
}
}
这篇博客详细介绍了二叉树的非递归中序遍历和层次遍历算法。中序遍历通过借助栈来实现,先将节点入栈然后遍历左子树,直到左子树为空,再访问节点并遍历右子树。层次遍历则利用队列,先将根节点入队,然后按层访问,每取出一个节点就将其左右子节点依次入队,直至队列为空。这两种遍历方法是理解二叉树操作的基础。
1697

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



