美文网首页
【数据结构】【C#】026-二叉树(BT):🌱遍历介绍

【数据结构】【C#】026-二叉树(BT):🌱遍历介绍

作者: lijianfex | 来源:发表于2018-11-10 07:49 被阅读24次

一、递归遍历:

1、先序遍历:

2、中序遍历:

3、后续遍历:
总结规律:

二、非递归遍历:利用栈来实现

非递归算法实现的基本思路:使用堆栈
【1】中序遍历非递归遍历算法:
1、遇到一个结点,就把它压栈,并去遍历它的左子树;
2、当左子树遍历结束后,从栈顶弹出这个结点并访问它;
3、然后按其右指针再去中序遍历该结点的右子树。

【2】先序遍历的非递归遍历算法:
只需把输出语句调换到第一次访问元素的位置即可
【3】后序遍历的非递归遍历算法:

参考文章1
参考文章2
参考文章3

  • 后序遍历的非递归实现是三种遍历方式中最难的一种。因为在后序遍历中,要保证左孩子和右孩子都已被访问并且左孩子在右孩子前访问才能访问根结点,这就为流程的控制带来了难题。

  • 对于任一结点P,将其入栈,然后沿其左子树一直往下搜索,直到搜索到没有左孩子的结点,此时该结点出现在栈顶,但是此时不能将其出栈并访问, 因此其右孩子还为被访问。所以接下来按照相同的规则对其右子树进行相同的处理,当访问完其右孩子时,该结点又出现在栈顶,此时可以将其出栈并访问。这样就 保证了正确的访问顺序。可以看出,在这个过程中,每个结点都两次出现在栈顶,只有在第二次出现在栈顶时,才能访问它。因此需要多设置一个变量标识该结点是 否是第一次出现在栈顶。


    该双栈法较为简单明了,来自参考文章2

三、层序遍历:利用队列实现

按照树的层级进行遍历,因此每次要把其左右孩子记录下来




相关文章

  • 【数据结构】【C#】026-二叉树(BT):🌱遍历介绍

    一、递归遍历: 1、先序遍历:2、中序遍历:3、后续遍历:总结规律: 二、非递归遍历:利用栈来实现 非递归算法实现...

  • C# 实现二叉树的遍历算法

    C# 实现二叉树的遍历算法 数据结构 BiTreeNode: 树节点public char Value { get...

  • Morris 二叉树遍历算法(C语言描述)

    对于二叉树的遍历,在数据结构中介绍有三种遍历方式:前序遍历,中序遍历和后序遍历. 这三种遍历方式通常采用递归或者迭...

  • 二叉树的遍历

    数据结构算法 二叉树的遍历

  • python实现二叉树的遍历

    二叉树是一种非常重要的数据结构,很多其它数据结构都是基于二叉树的基础演变而来的。对于二叉树,有深度遍历和广度遍历,...

  • 算法系列--二叉树的三种遍历的六种实现

    0. 二叉树是常见的数据结构,二叉树常见的遍历方式有前序遍历,中序遍历和后序遍历。前序遍历就是中-左-右节点的顺序...

  • 算法学习

    ### 实现二叉树以及二叉树遍历数据结构递归比较重要 1.先序遍历 先序遍历,就是先遍历根节点然后再遍历左子树,最...

  • 经典算法代码集

    本文是经典算法的集合,使用C#语言来实现。 1. 二叉树 二叉树结构定义 1.1 二叉树的遍历 先定义一个遍历处理...

  • 二叉树的四种遍历方法

    二叉树的数据结构 1、前序遍历(递归) 2、中序遍历(递归) 3、后序遍历(递归) 4、层次遍历(队列)

  • Python实现深度优先与广度优先

    二叉树的两种遍历是数据结构的经典考察题目, 广度遍历考察队列结构, 深度遍历考察递归 二叉树 深度优先 先序遍历(...

网友评论

      本文标题:【数据结构】【C#】026-二叉树(BT):🌱遍历介绍

      本文链接:https://www.haomeiwen.com/subject/drkoxqtx.html