中序遍历非递归算法
二叉树中序遍历的非递归算法的关键:在中序遍历过某结点的整个左子树后,如何找到该结点的根以及右子树
基本思想:
代码:
Status InOrderTraverse(BiTree T) {
BiTree p; InitStack(S); p = T;
while(p || !StackEmpty(S)) {
if(p) {
Push(S, p);
p = p->lchild;
//如果此根结点的左子树不存在,则从栈中出栈最上面的元素,然后遍历该元素的右子树
} else {
Pop(S, q);
printf("%c", q->data);
p = q->rchild;
}
}
return OK;
}
二叉树的层次遍历
层次遍历:对于一棵二叉树,从根节点开始,按从上到下,从左到右的顺序访问每一个结点。(每一个结点仅仅访问一次)

算法设计思路:使用一个队列
二叉树层次遍历算法:
void LevelOrder(BTNode *b) {
BTNode *p; SqQueue *qu;
InitQueue(qu); //初始化队列
enQueue(qu, b); //根结点指针进入队列
while(!QueueEmpty(qu)) { //队不为空,则循环
deQueue(qu, p); //出队结点p
printf("%c", p->data); //访问结点p
if(p->lchild!=NULL) //若p有左孩子,将其左孩子结点入队
enQueue(qu, p->lchild);
if(p->rchild != NULL) //若p有右孩子,将其右孩子结点入队
enQueue(qu, p->rchild);
}
}