二叉树的四种遍历方法(前序遍历、中序遍历、后序遍历、层序遍历)有图有真相!!!
文章目录
- 二叉树的四种遍历方式
- 前序遍历(Preorder Traversal)
- 中序遍历(Inorder Traversal)
- 后序遍历(Postorder Traversal)
- 层序遍历(Level Order Traversal)
二叉树的四种遍历方式
相信大家能够看到二叉树的遍历就已经对二叉树本身有了足够的了解,这里就不进行过多的赘述了,我们直接进入正题。我们知道线性数据结构的遍历一般就是前序遍历和后序遍历,而二叉树的遍历常见的有三种:前序遍历、中序遍历、后序遍历(注意:前中后是针对根节点而言的),有时候也会提到层序遍历。
前序遍历(Preorder Traversal)
访问顺序:根节点——>前序遍历左子树——>前序遍历右子树
代码实现
/**
* 通过递归实现
* 对树进行前序遍历
* @param node 需要进行前序遍历的树的根节点,比如首先是大树的根节点,再是左子树的根节点,一直调用
*/
public void preOrderTraversal(Node<E> node){if (node == null) {return;}System.out.println(node.element);//输出节点的值preOrderTraversal(node.left);preOrderTraversal(node.right);
}
中序遍历(Inorder Traversal)
访问顺序:中序遍历左子树——>根节点——>中序遍历右子树
中序遍历二叉搜索树的结果是有序的,一般为升序
代码实现
/**
* 递归实现对二叉树的中序遍历
* @param node 传入一棵树的根节点,先中序遍历一棵树的左边输出值,再输出根节点的值,最后遍历右边
*/
public void inOrderTraversal(Node<E> node) {if (node == null) {return;}inOrderTraversal(node.left);System.out.println(node.element);inOrderTraversal(node.right);
}
后序遍历(Postorder Traversal)
访问顺序:后序遍历左子树——>后序遍历右子树——>根节点
代码实现
/**
* 递归实现后序遍历
* @param node 传入一颗树的根节点
* 大家可以想象这个递归过程,当我们递归到最左边的叶子节点时,左右子树都为空时会输出叶子节点值,重复如此
*/
private void potsOrderTraversal(Node<E> node) {if (node == null) {return;}potsOrderTraversal(node.left);potsOrderTraversal(node.right);System.out.println(node.element);
}
层序遍历(Level Order Traversal)
访问顺序:从根节点开始,一层一层向下访问。
代码实现
/**
* 实现树的层序遍历
*
* @param node 传入一颗树的根节点,使用队列来完成
* 1.将根节点放入队
* 2.将队头节点出队访问,将队头节点的左节点入队,再将右节点入队(将这一步循环操作,直到队列为空)
*/
public void levelOrderTraversal(Node<E> node) {if (node == null) {//若根节点为空直接返回return;}Queue<Node<E>> queue = new LinkedList<>();queue.offer(node);//将根节点入队while (!queue.isEmpty()) {//队列不为空就一直循环Node<E> firstNode = queue.poll();//将队首元素出队System.out.println(firstNode.element);//访问if (firstNode.left != null) {//在队首元素出队时将其左节点入队queue.offer(firstNode.left);}if (firstNode.right != null) {//在队首元素出队时将其右节点入队queue.offer(firstNode.right);}}
}
二叉树的四种遍历方法(前序遍历、中序遍历、后序遍历、层序遍历)有图有真相!!!相关推荐
- 遍历二叉树(四种方式:前序、中序、后序、层序)
二叉树顺序存储结构 二叉树的顺序存储结构就是用一维数组存储二义树中的结点并且结点的存储位置,也就是数组的下标要能体现结点之间的逻辑关系,比如双亲与孩子的关系,左右兄弟的关系等. 顺序存储结构一般只用于 ...
- 用递归方式实现二叉树先序、中序、后序遍历
先序遍历:中.左.右 中序遍历:左.中.右 后序遍历:左.右.中 比如下面这科树 1 2 3 4 5 6 7 package com.sangfor.tree;public ...
- 二叉树的四种遍历方式(前序遍历、中序遍历、后序遍历、测层序遍历)
一.二叉树的遍历 遍历是数据结构中的常见的操作,把所有元素都访问一遍. 线性数据结构的遍历比较简单 ①.正序遍历 ②.逆序遍历 根据节点访问顺序的不同,二叉树的常见遍历方式用四种 ①.前序遍历(Pre ...
- 二叉树的四种遍历方式
二叉树的四种遍历方式: 二叉树的遍历(traversing binary tree)是指从根结点出发,按照某种次序依次访问二叉树中所有的结点,使得每个结点被访问依次且仅被访问一次. 四种遍历方式分别为 ...
- 【数据结构】理解二叉树的三种遍历--前序、中序、后序 +层序(简明易懂)
一.易懂的形象理解 其实从名字就可以很好的理解这三种遍历,我在第二点时候说,但是估计能翻到我的文的同学们之前肯定看过好多类似的了,那咱们换个思路~ 先用我想的一种简单易懂的形象思维理解一下前序.中序. ...
- C语言数据结构之二叉树的层次建树及遍历方法(前序,中序,后序,层次遍历)
C语言数据结构之二叉树的层次建树及遍历方法(前序,中序,后序,层次遍历) tips:前些天学习了C语言数据结构链表,栈,队列.今天来学习一下C语言数据结构之二叉树的各种操作. 注意:二叉树的层次建树是 ...
- 二叉树前序、中序、后序遍历及推导方法
目录 二叉树的遍历方法 推导遍历结果 1.已知前序遍历和中序遍历 2.已知中序遍历和后序遍历 3.已知前序遍历和后序遍历,无法确定一颗唯一的二叉树 参考文献 二叉树的遍历方法 前序遍历:根左右.先打印 ...
- 遍历二叉树的四种方式和图解
二叉树的遍历是指从根结点出发,按照某种次序依次访问二叉树中所有结点,使得每个结点被访问一次且仅被访问一次 1.前序遍历算法 规则是若二叉树若为空,则空操作返回,否则先访问根结点,然后遍历左子树,然后再 ...
- 二叉树深度优先 java_二叉树遍历(前序、中序、后序、层次、深度优先、广度优先遍历) java实现...
二叉树是一种非常重要的数据结构,非常多其他数据结构都是基于二叉树的基础演变而来的.对于二叉树,有深度遍历和广度遍历,深度遍历有前序.中序以及后序三种遍历方法,广度遍历即我们寻常所说的层次遍历.由于树的 ...
最新文章
- 天空之城(君をのせて)主题曲
- mysql 修改上传文件大小限制吗_修改PHP上传文件大小限制的方法(转)
- 也说说TIME_WAIT状态
- 如何免费注册使用虚拟主机和二级域名建站
- HTML+CSS 模仿Windows 7 桌面效果
- asp.net 数据绑定 使用eval 时候报 “字符文本中的字符太多” 问题解决
- Java开发笔记(一百四十七)通过JDBC管理数据库
- 有人提到田英章欧体田字格范本,说两句。
- ABBYY FineReader15最新免费下载安装地址激活2020注册机教程
- 软件测试周刊(第28期):越向前走,越有光明的前途。
- 餐厅点餐系统设计思路
- Longest Increasing Subsequence
- C中printf()的常用输出
- CSV是什么文件格式
- 华为谷歌android 6.0是什么,盘点那些用上Android 6.0的手机
- win10自动关机设置_电脑小技巧设置自动关机
- PHPJavaJavascript通用RSA加密
- 集合排乱序、升序、降序
- 无线路由器设置成无线AP,解决家里设备不在一个网段的尴尬
- HihoCoder 1082 : 然而沼跃鱼早就看穿了一切
热门文章
- [附源码]计算机毕业设计JAVA基于Java小区电信计费管理系统
- 乐心健康php,在线刷乐心健康微信支付宝步数模板
- 异构计算=未来?一文带你秒懂3大主流异构
- 电脑上使用的企业微信怎么设置或者更改截屏快捷键?
- WinForm中使用LightningChart作图
- 三支妙笔,再绘《姑苏繁华图》
- 刚学平面设计如何用简单的方法来设计字体
- TFIDF | 有权重的计算文本情感得分
- 网络性能总不好?网络调优专家AOE帮你来“看看”
- 自动|unswap|夹子机器人|部署