二叉树遍历

先序:根、左、右

ABCDE

序列: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); } }