数据结构之二叉树的遍历1(Java)
  kIM7GUNpnV3x 2023年11月19日 22 0

一:概述

在前面的博文中,已经对二叉树的基础知识做了概述。接下来说明一下二叉树的遍历。

二:具体说明

在计算机程序中,遍历本身是一个线性操作。所以遍历同样具有线性结构的数组或链表,是一件比较简单的事情。

                                            数据结构之二叉树的遍历1(Java)_中序遍历

反观二叉树,是典型的非线性数据结构,遍历时需要把非线性关联的节点转化成一个线性的序列,以不同的方式来遍历,遍历出的序列顺序也不同。、

                                            数据结构之二叉树的遍历1(Java)_后序遍历_02

二叉树的遍历方式:

从节点的位置关系的角度来看,二叉树的遍历分为4种:

  1. 前序遍历
  2. 中序遍历
  3. 后序遍历
  4. 层序遍历

从更宏观的角度来看,二叉树的遍历归结为两大类。

  • 深度优先遍历(前序遍历、中序遍历、后序遍历)
  • 广度优先遍历(层序遍历)。

三:深度优先遍历

深度优先和广度优先这两个概念不止局限于二叉树,它们更是一种抽象的算法思想,决定了访问某些复杂数据结构的顺序。在访问树、图,或者其他一些复杂的数据结构时,这两个概念常常被使用到。

所谓深度优先,顾名思义,就是偏向于纵深,”一头扎到底“的访问方式。可能这种说法有些抽象。下面来仔细说说一说,前序遍历、中序遍历和后序遍历。

<1>前序遍历

二叉树的前序遍历,输出顺序是根结点、左子树、右子树。

                                            数据结构之二叉树的遍历1(Java)_二叉树_03

上图是二叉树的前序遍历,每个节点外面的序号代表该节点的输出顺序,详细步骤如下:

1.首先输出的是根节点1.

                                            数据结构之二叉树的遍历1(Java)_二叉树_04

2.由于根节点1存在左孩子,输出左孩子节点2.

                                            数据结构之二叉树的遍历1(Java)_后序遍历_05

3.由于节点2也存在左孩子,输出左孩子节点4.

                                            数据结构之二叉树的遍历1(Java)_后序遍历_06

4.节点4既没有左孩子,也没有右孩子,那么回到节点2,输出节点2的右孩子5.

                                            数据结构之二叉树的遍历1(Java)_二叉树_07

5.节点5既没有左孩子,也没有右孩子,那么回到节点1,输出节点1的右孩子3.

                                            数据结构之二叉树的遍历1(Java)_后序遍历_08

6.节点3没有左孩子,但是有右孩子,因此输出节点3的右孩子节点6.

                                            数据结构之二叉树的遍历1(Java)_后序遍历_09

至此为止,所有节点的遍历输出完毕。

<2>中序遍历

1.二叉树的中序遍历,输出顺序是左子树、根节点、右子树。

                                            数据结构之二叉树的遍历1(Java)_二叉树_10

上图是一个二叉树的中序遍历,每个节点外的序号代表该节点的输出顺序,详细步骤如下。

1.首先访问根节点的左孩子,如果这个左孩子还拥有左孩子,则继续深入访问下去,一直找到不再有左孩子的节点,并输出该节点。显然,第一个没有左孩子的节点是节点4.

                                            数据结构之二叉树的遍历1(Java)_中序遍历_11

2.依照中序遍历的次序,接下来输出节点4的父节点2.

                                            数据结构之二叉树的遍历1(Java)_二叉树_12

3.再输出节点2的右孩子节点5.

                                            数据结构之二叉树的遍历1(Java)_中序遍历_13

4.以节点2为根的左子树已经输出完毕,这时再输出整个二叉树的根节点1.

                                            数据结构之二叉树的遍历1(Java)_中序遍历_14

5.由于节点3没有左孩子,所以直接输出根节点1的右孩子节点3.

                                            数据结构之二叉树的遍历1(Java)_后序遍历_15

6.最后输出节点3的右孩子节点6.

                                            数据结构之二叉树的遍历1(Java)_后序遍历_16

到此为止,二叉树的中序遍历输出完毕。

<3>后序遍历

二叉树的后序遍历,输出顺序是左子树、右子树、根节点。

                                            数据结构之二叉树的遍历1(Java)_二叉树_17

上图是一个二叉树的后序遍历,每个节点外的序号代表该节点的输出顺序。

因为二叉树的前序遍历、中序遍历、后序遍历的思想大致相同,所以后序遍历的详细步骤就不赘述了。

根据前两个相出来很简单。



















【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月19日 0

暂无评论

kIM7GUNpnV3x