一目了然——二叉树的遍历(先序,中序,后序遍历)
作者:互联网
1.1什么是树:
树是一种非线性的数据结构,其形状也形似一颗树,有其唯一的根,和若干互不相交的子树。
1.2 首先我们先来了解一下树的一个主要的分支——二叉树:如下图
1.3 二叉树的定义:
- 每个节点最多只有两颗子树。
- 子树有左子树,右子树,不能颠倒顺序。
2.1二叉树的遍历:
- 无论是先序遍历还是中序遍历,后序遍历我们都可以采用一个规则来遍历树的每一个节点。
- 头节点开始——>左子树——>左子树的左子树——>...
- 当遍历到根节点即该结点没有孩子节点时,则向该节点的父结点返回
- 则向遍历根节点的父结点的右孩子进行遍历
- 再重复上述步骤
如图箭头演示的顺序进行:
2.2 先序遍历:
- 按照上述统一规则,先序遍历就是依次记录沿路第一次经过该结点的元素
- 如图演示:
先序遍历结果:A1 A2 A3 A4 A5 A6
先序遍历二叉树的代码:(递归)
void preorder(BTNode *p) //p为遍历指针
{
if (p != NULL)
{
visit(p); //当第一次遍历该结点时,就访问操作
preorder(p->lchild); //先序遍历左子树
preorder(p->rchild); //先序遍历右子树
}
}
2.3中序遍历:
- 按照上述步骤,中序遍历就是依次记录沿路第二次经过时该结点的元素
- 如图演示:
中序遍历结果:A4 A2 A5 A1 A6 A3
中序遍历的代码:(递归)
void preorder(BTNode *p) //p为遍历指针
{
if (p != NULL)
{
preorder(p->lchild); //遍历左子树
visit(p); //当第二次遍历该结点时,就访问操作
preorder(p->rchild); //遍历右子树
}
}
2.4 后序遍历:
- 按照上述统一规则,后序遍历就是依次记录沿路第三次经过时该结点的元素
- 如图演示:
后序遍历结果:A4 A5 A2 A6 A3 A1
后序遍历的代码:(递归)
void preorder(BTNode *p) //p为遍历指针
{
if (p != NULL)
{
preorder(p->lchild); //遍历左子树
preorder(p->rchild); //遍历右子树
visit(p); //当第三次遍历该结点时,就访问操作
}
}
标签:左子,preorder,结点,遍历,中序,二叉树,先序 来源: https://blog.csdn.net/m0_55633659/article/details/123615968