先序:根、左、右
序列:A B D E C。先序常用于复制二叉树或得到前缀表达式。
void PreOrder(BiTree root) {
if (root == NULL) return;
visit(root);
PreOrder(root->lchild);
PreOrder(root->rchild);
}
中序:左、根、右
序列:D B E A C。对二叉排序树做中序遍历,可得到递增关键字序列。
void InOrder(BiTree root) {
if (root == NULL) return;
InOrder(root->lchild);
visit(root);
InOrder(root->rchild);
}
后序:左、右、根
序列:D E B C A。后序常用于释放二叉树,因为孩子会先于双亲被处理。
void PostOrder(BiTree root) {
if (root == NULL) return;
PostOrder(root->lchild);
PostOrder(root->rchild);
visit(root);
}
层次遍历:基于队列
从上到下、从左到右访问。队列中保存“已经访问但孩子尚未扫描”的结点。
void LevelOrder(BiTree root) {
if (root == NULL) return;
EnQueue(root);
while (!QueueEmpty()) {
BiNode *node = DeQueue();
visit(node);
if (node->lchild) EnQueue(node->lchild);
if (node->rchild) EnQueue(node->rchild);
}
}