ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2022-03-20 18:01:54  阅读:146  来源: 互联网

标签:左子 preorder 结点 遍历 中序 二叉树 先序


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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有