一目了然——二叉树的遍历(先序,中序,后序遍历)

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);  //当第三次遍历该结点时,就访问操作
  }
}

​

​

​

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值