前言
在《什么是二叉树》中,我们介绍了二叉树的创建(插入),查找和删除,本文将介绍二叉树的遍历。而二叉树遍历有多种形式,他们也可以应用在不同的场景中,常见的深度优先遍历方式有前序遍历,中序遍历,后序遍历,而不常用广度优先遍历方式有层次遍历。本文将会对以上遍历方式都进行介绍。
二叉树的遍历
常见遍历顺序有以下几种:
-
前序遍历,先检查节点值,然后递归遍历左子树和右子树
-
中序遍历,先遍历左子树,然后检查当前节点值,最后遍历右子树
-
后序遍历,先递归遍历左右子树,然后检查当前节点值
-
层次遍历,如名字所言,从第一层开始,一层一层往下遍历
以下图为例,我们一一介绍四种遍历方式。
二叉树
前序遍历
-
输出当前节点值10,然后输出左子树,最后输出右子树;
-
对于其左子树来说,同样以这样的顺序,则先输出5,然后输出左子树4,最后输出右子树8;
-
对于其右子树,同样以这样的顺序,则先输出19,然后输出左子树13,最后输出右子树24;
-
最终得到前序遍历输出为:10,5,4,8,19,13,24。
前序遍历
前序遍历代码:
void preOrder(TreeNode *tree)
{
if(NULL == tree)
return;
printf("%d ",tree->value);
preOrder(tree->left);
preOrder(tree->right);
}
中序遍历: