二叉树的前,中,后序遍历(思路分析) [Java][数据结构]
二叉树的前,中,后序遍历(思路分析)
前序遍历:
先输出父节点, 再遍历左子树和右子树
中序遍历:
先遍历左子树, 再输出父节点,再遍历右子树
后序遍历:
先遍历左子树,再遍历右子树,最后输出父节点
分析二叉树的前序,中序,后序的遍历步骤:
前序遍历:
- 创建一颗二叉树
- 先输出当前节点(初始的时候是root节点)
- 如果左子节点不为空 , 则递归继续遍历左子树
- 如果右子节点不为空,则递归继续遍历右子树
中序遍历:
- 先创建一颗二叉树
- 如果当前节点的左子节点不为空, 则递归中序遍历左子树
- 输出当前节点
- 如果当前节点的右子节点不为空 , 则递归中序遍历右子树
- 二叉排序树(二分搜索树)中序遍历的结果就是一个升序序列
后序遍历:
- 先创建一颗二叉树
- 如果当前节点的左子节点不为空 , 则递归后序遍历左子树
- 如果当前节点的右子节点不为空, 则递归后序遍历右子树
- 输出当前节点
小结:看输出父节点的顺序就能确定是前序,中序,还是后序遍历
注意: 此时我们没有讲二叉树的递归创建,所以此时我们会手动的创建一个二叉树来测试,并不会编写专门创建二叉树的方法
补充(2022-4-25):
对于二叉树和链表遍历的时候如果我们要给对应的链表结点类或者是树结点类重写toString()方法,这个时候我们一定要注意: 我们不能输出对应的指针域( 也就是对于链表我们不要输出next域. , 对于二叉树我们不要输出left和right), 我们这里以链表为例来进行一个讲解, 如果我们在链表结点类中重写toString()方法的时候输出了next属性,此时由于我们的next属性是引用类型的属性,这个时候输出这个next属性的时候就会自动调用这个next属性的toString()方法,这个时候这个next属性其实就是执行了下一个位置的节点,此时我们就相当于要输出下一个节点,而我们在这个next节点中的toString方法中又会输出这个next节点对应的next属性, 这个时候就一直递归了下去,知道输出到链表的最后一个节点的next属性的时候这个属性为null,然后就直接输出null,不会继续调用toString()方法
- 当我们输出一个引用类型数据的时候会自动调用这个引用类型数据的所在类中的toString()方法, 但是我们的java官方进行了一个优化, 就是如果我们是输出一个引用类型的变量,这个时候如果这个引用类型的变量指向了null,那么我们就不会使用这个引用类型的变量调用toString()方法 —> 就避免了空指针异常的发生
补充二(2022-4-25):
其实对于使用到链式结构的数据结构中(哈希表, 树等),我们可以将对应的一系列操作都放到节点类中完成, 比如如果是树结构我们要完成前序遍历, 我们可以将前序遍历的方法完成在我们的树节点类中,然后到二叉树类中直接调用这个前序遍历的方法就可以了(当然,我们肯定是要使用头结点调用 , 因为我们遍历树肯定是要从头结点开始遍历)
- 这个时候我们使用头结点调用这个树节点类的前序遍历的方法,那么我们的头结点在这个方法中扮演的角色就是这个方法中的this —> 我们的一个成员方法中,谁调用的这个方法,那么this就指向谁
- 构造方法中this表示的是正在创建的对象,创建哪个对象,对应的构造方法中的this就指向谁
二叉树的前,中,后序遍历(思路分析) [Java][数据结构]相关推荐
- 二叉树的前中后序查找+思路分析
思路分析 代码实现 package com.atguigu.tree;/*** @创建人 wdl* @创建时间 2021/3/24* @描述*/ public class BinaryTreeDemo ...
- Java二叉树的前中后序遍历
Java二叉树的前中后序遍历 1.前序遍历 1.1前序遍历概念 1.2前序遍历习题 2.中序遍历 2.1中序遍历概念 2.2中序遍历习题 3.后续遍历 3.1后序遍历概念 3.2后序遍历习题 大家好, ...
- 数据结构之二叉树的前中后序遍历以及层序遍历
学习目标:读完这篇博客搞定二叉树的前中后序以及层序遍历 首先:你应该明白什么是二叉树,下面这幅图就是一个完全二叉树 其实所谓的二叉树就是一个节点有小于等于二个分支的树,可以没有分支,可以有1条分支,可 ...
- 数据结构与算法(java):树-二叉树(二叉查找树(BST)、线索化二叉树、哈夫曼树、平衡二叉树【AVL】、二叉树的前中后序遍历)
二叉树 1.定义 二叉树 就是度不超过2的树(每个结点最多只有两个子结点).如图 2.特殊二叉树 满二叉树 当二叉树的每一个层的结点树都达到最大值,则这个二叉树就是满二叉树. 完全二叉树 叶结点只能出 ...
- 二叉树的前中后序遍历之迭代法(非统一风格迭代方式)
文章目录 前言 一.前序遍历(迭代法) 二.中序遍历(迭代法) 三.后序遍历(迭代法) 总结 前言 「递归的实现就是:每一次递归调用都会把函数的局部变量.参数值和返回地址等压入调用栈中」,然后递归返回 ...
- 二叉树的前中后序遍历(考试常考)
二叉树遍历的概念 二叉树的遍历是按某种规则对二叉树的每个节点均只被访问一次,根据根节点访问位置的不同分为三种:先序遍历(根左右).中序遍历(左根右).后序遍历(左右根). 由于树是通过 ...
- Java~二叉树的前中后序遍历的几种方式(递归法,迭代法,标记法等)
目录 一.结点的定义 二.递归法遍历二叉树 前序遍历 中序遍历 后序遍历 三.迭代(非递归)遍历二叉树 (1).迭代模拟法 前序遍历 中序遍历 后序遍历 (2).空指针标记法 前序遍历 中序遍历 后序 ...
- 【数据结构】二叉树的前中后序遍历
二叉树的三种遍历 1. 创建一棵简单的二叉树 1.1 二叉树结构体实现 1.2 创造一个二叉树结点的函数 1.3 手动创造一棵二叉树 2.为什么要遍历? 3.最重要的知识:由二叉树引出的子问题分析 4 ...
- 【Java数据结构】二叉树的前中后序遍历(递归和非递归)
二叉树的遍历 递归做法 前序遍历 中序遍历 后序遍历 非递归 前序遍历 中序遍历 后序遍历 二叉树遍历是二叉树的一种重要操作 必须要掌握 二叉树的遍历可以用递归和非递归两种做法来实现 递归做法 前序遍 ...
最新文章
- 测试方案_何小伟:ABTest测试方案
- centos6.5安装remmina rdp
- 6.4 如何初始化聚类中心-机器学习笔记-斯坦福吴恩达教授
- C 和C语言条件运算符的区别
- 2020直播电商研究报告
- mysql having的用法
- [转载]从零开始学习OpenGL ES之五 – 材质
- 数据库信息泄漏 不可忽视的安全短板
- id-mapping 理解和实现
- 微信点拼多多砍价显示服务器吃撑,微信狠起来自己人都打?最严外链规范实行,微视、拼多多砍价链接被限制!...
- wm_concat和listagg
- 主攻文推荐攻守都有系统_坚守最后一道防线
- (USB:VCP+HID复合设备与系统配置)
- c语言实验--九九乘法表,C语言程序设计实验四 参考答案.doc
- 【linux】lsb_release -a命令
- Oracle EBS AP预付款发票核销可用金额查询SQL
- 拟推荐全省文物系统先进_关于对拟表彰全省文博系统文化遗产工作先进集体和先进工作者公示的公告...
- 程序验证(五):一阶理论的过程
- |--------硬件故障专题--------| 主板.CPU.硬盘.内存.显卡.声卡
- 苹果手机点击输入框页面自动放大