二叉树的先序、中序、后序以及层次遍历
二叉树的先序、中序、后序以及层次遍历
方法:在遍历二叉树的时候,一个节点的遍历我们把它看做要经过它三次(下图红色区域)。
当经过一次,被写出来的点,我们称它为先序遍历。
当经过两次,被写出来的点,我们称它为中序遍历。
当经过三次,被写出来的点,我们称它为后序遍历。
1、先序(根)遍历
先序遍历(D-L-R),按照根左右的顺序沿一定路径经过路径上所有的结点。在二叉树中,先根后左再右。巧记:根左右。
先序遍历(只结果该节点一次,就被记录下来)
2、中序(根)遍历
中序遍历(LDR),按照左根右的顺序沿一定路径经过路径上所有的结点,中序遍历首先遍历左子树,然后访问根结点,最后遍历右子树,巧记:左根右。
3、后序(根)遍历
后序遍历(LRD),按照左右根的顺序沿一定路径经过路径上所有的结点,后序遍历首先遍历左子树,然后访问右子树,最后遍历根结点,巧记:左右根。
4、层次遍历
按照二叉树的层数,一层层遍历。
要进行层次遍历,需要建立一个循环队列。先将二叉树头结点入队列,再将头结点的左、右节点入队列,此时头节点就可以出队列遍历,然后重复上面的操作直到队头和队尾为空,这就是层次遍历。
注:在二叉树遍历中先序和中序或者中序和后序可以确定唯一的一棵二叉树。
例如:一棵二叉树的中序是:BDCAEHGKF 后序是:DCBHKGFEA
就可以得到该二叉树的结构如下:
代码:
节点类
public class Node {//节点类public int data;//数据域public Node lnode;//左节点public Node rnode;//右节点public void addNode(Node n) {if(n.data < this.data) {//左节点if(lnode == null) {lnode = n;}else lnode.addNode(n);}else {if(rnode == null) {rnode = n;}else rnode.addNode(n);}}public void xianxu() {//先序遍历System.out.print(this.data);if(lnode != null) lnode.xianxu();if(rnode != null) rnode.xianxu();}public void zhongxu() {//中序遍历if(lnode != null) lnode.zhongxu();System.out.print(this.data);if(rnode != null) rnode.zhongxu();}public void houxu() {//后序遍历if(lnode != null) lnode.houxu();if(rnode != null) rnode.houxu();System.out.print(this.data);}}
树类
public class MyTree {private Node root;//根节点public void add(int a) {Node n = new Node();n.data = a;if(root == null) {root = n;}else {root.addNode(n);}}public void sort() {if(root == null) return;else root.zhongxu();}public static void main(String[] args) {MyTree mt = new MyTree();mt.add(5);mt.add(4);mt.add(8);mt.add(6);mt.add(0);mt.sort();System.out.println();}
}
二叉树的先序、中序、后序以及层次遍历相关推荐
- 二叉树的前、中、后的非递归遍历
题目 实现一个链式存储的二叉树,采用非递归的形式,按照前.中.后序的顺序遍历二叉树. 代码 /** * 二叉树的前.中.后序的非递归遍历 **/#include <iostream> us ...
- 二叉树的前、中、后序遍历
所谓二叉树遍历是按某种特定规则,依次对二叉树中的节点进行相应的操作,并且每个节点只操作一次.访问结点所做的操作依赖于具体的应用问题. 遍历是二叉树上最重要的运算之一,也是二叉树进行其它运算的基础. 二 ...
- 【数据结构与算法】力扣:二叉树的前、中、后序遍历
递归法 前序遍历 给你二叉树的根节点 root ,返回它节点值的前序 遍历. 示例 1: 输入:root = [1,null,2,3] 输出:[1,2,3] 示例 2: 输入:root = [] 输出 ...
- 二叉树的前、中、后序遍历的代码实现(递归方式)
测试的二叉树的结构 root lfb1 rtb1rtb2 控制台输出的遍历结果 ======从根节点开始,前序遍历此二叉树======= root lfb1 rtb1 rtb2 ======从根节点开 ...
- java中二叉树_Java工程师面试1000题224-递归非递归实现二叉树前、中、后序遍历...
224.使用递归和非递归实现二叉树的前.中.后序遍历 使用递归来实现二叉树的前.中.后序遍历比较简单,直接给出代码,我们重点讨论非递归的实现. class Node { public int valu ...
- 二叉树遍历方法——前、中、后序遍历(图解)
目录 一.前序遍历 (1)递归版本 (2)非递归版本 二.中序遍历 (1)递归版本 (2)非递归版本 三.后序遍历 (1)递归版本 (2)非递归版本 四.总结 五.测试程序 六.程序输出 二叉树的遍历 ...
- 已知一棵二叉树的中序序列和后序序列,写一个建立该二叉树的二叉链表存储结构的算法...
已知一棵二叉树的中序序列和后序序列,写一个建立该二叉树的二叉链表存储结构的算法 #define N 10 //二叉树节点的个数 char postorderstr[]={};//后序序列 char i ...
- 7-10 先序序列创建二叉树,输出先序序列、中序序列、后序序列并输出叶子结点数 (10 分)
7-10 先序序列创建二叉树,输出先序序列.中序序列.后序序列并输出叶子结点数 (10 分) 对于给定的二叉树,输出其先序序列.中序序列.后序序列并输出叶子结点数. 输入格式: 二叉树的先序遍历序列. ...
- 二叉树的构造(前序+中序)---(后序 + 中序)
二叉树的构造(前序+中序)-(后序 + 中序) 思路:要对前序+中序(后序+中序)的构建树的动态过程要了解,思路比较简单,在了解了这个过程之后,理解下面代码就容易了. 过程 参考图: 前序 + 中序: ...
- 先序序列和中序序列构造二叉树,中序序列和后序序列构造二叉树
1:首先读者要了解二叉树BinaryTree基本概念,其次区分左子树与左孩子节点,右子树与右孩子节点.(在数据结构中 一个节点可以成为一棵树,对于没有孩子节点的节点称为为叶子节点). 2:在 ...
最新文章
- Linux的目录结构和头文件相关;哪里找- sys/types.h, sys/stat.h
- 华为畅享max有没有人脸识别_谁说千元机就要将就?华为畅享Z全面测评:5G、屏幕、拍照无短板...
- 【攻防世界003】re-for-50-plz-50
- ElementUI中弹窗使用textarea原样显示SpringBoot后台带换行的StringBuilder内容
- matlab之norm函数
- 【活动】畅想云端加油站,赢iPad
- 自带数据线的迷你数显充电宝,好用到哭
- 作者:姚登举(1980-),男,哈尔滨理工大学副教授。
- 宝塔linux_Linux虚拟机上快速搭建宝塔 部署PHP运行环境
- 一年月份大小月口诀_家乡山溪长的菖蒲种植有讲究,记住“口诀”事半功倍
- 医学专业失业率最高 三类相关行业人才紧缺
- 数据库实验3 数据库的单表查询
- java编程思想--协变返回类型
- bjui给出的一个标准应用的首页
- 计算机excer试题,计算机电子表格excel练习题
- 矩阵标准型的系数是特征值吗_矩阵分解术,不得不从高斯说起
- Nodejs中,使用nock做http请求的mock
- thzvv.com forum php,为什么Naver账号不能用了?
- 输入大写字母打印三角形
- 消息中间件MQ的学习境界和路线