二叉树的前,中,后序遍历(思路分析)

前序遍历:

先输出父节点, 再遍历左子树和右子树

中序遍历:

先遍历左子树, 再输出父节点,再遍历右子树

后序遍历:

先遍历左子树,再遍历右子树,最后输出父节点

分析二叉树的前序,中序,后序的遍历步骤:

前序遍历:

  1. 创建一颗二叉树
  2. 先输出当前节点(初始的时候是root节点)
  3. 如果左子节点不为空 , 则递归继续遍历左子树
  4. 如果右子节点不为空,则递归继续遍历右子树

中序遍历:

  1. 先创建一颗二叉树
  2. 如果当前节点的左子节点不为空, 则递归中序遍历左子树
  3. 输出当前节点
  4. 如果当前节点的右子节点不为空 , 则递归中序遍历右子树
  • 二叉排序树(二分搜索树)中序遍历的结果就是一个升序序列

后序遍历:

  1. 先创建一颗二叉树
  2. 如果当前节点的左子节点不为空 , 则递归后序遍历左子树
  3. 如果当前节点的右子节点不为空, 则递归后序遍历右子树
  4. 输出当前节点

小结:看输出父节点的顺序就能确定是前序,中序,还是后序遍历

注意: 此时我们没有讲二叉树的递归创建,所以此时我们会手动的创建一个二叉树来测试,并不会编写专门创建二叉树的方法

补充(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][数据结构]相关推荐

  1. 二叉树的前中后序查找+思路分析

    思路分析 代码实现 package com.atguigu.tree;/*** @创建人 wdl* @创建时间 2021/3/24* @描述*/ public class BinaryTreeDemo ...

  2. Java二叉树的前中后序遍历

    Java二叉树的前中后序遍历 1.前序遍历 1.1前序遍历概念 1.2前序遍历习题 2.中序遍历 2.1中序遍历概念 2.2中序遍历习题 3.后续遍历 3.1后序遍历概念 3.2后序遍历习题 大家好, ...

  3. 数据结构之二叉树的前中后序遍历以及层序遍历

    学习目标:读完这篇博客搞定二叉树的前中后序以及层序遍历 首先:你应该明白什么是二叉树,下面这幅图就是一个完全二叉树 其实所谓的二叉树就是一个节点有小于等于二个分支的树,可以没有分支,可以有1条分支,可 ...

  4. 数据结构与算法(java):树-二叉树(二叉查找树(BST)、线索化二叉树、哈夫曼树、平衡二叉树【AVL】、二叉树的前中后序遍历)

    二叉树 1.定义 二叉树 就是度不超过2的树(每个结点最多只有两个子结点).如图 2.特殊二叉树 满二叉树 当二叉树的每一个层的结点树都达到最大值,则这个二叉树就是满二叉树. 完全二叉树 叶结点只能出 ...

  5. 二叉树的前中后序遍历之迭代法(非统一风格迭代方式)

    文章目录 前言 一.前序遍历(迭代法) 二.中序遍历(迭代法) 三.后序遍历(迭代法) 总结 前言 「递归的实现就是:每一次递归调用都会把函数的局部变量.参数值和返回地址等压入调用栈中」,然后递归返回 ...

  6. 二叉树的前中后序遍历(考试常考)

    二叉树遍历的概念 二叉树的遍历是按某种规则对二叉树的每个节点均只被访问一次,根据根节点访问位置的不同分为三种:先序遍历(根左右).中序遍历(左根右).后序遍历(左右根).         由于树是通过 ...

  7. Java~二叉树的前中后序遍历的几种方式(递归法,迭代法,标记法等)

    目录 一.结点的定义 二.递归法遍历二叉树 前序遍历 中序遍历 后序遍历 三.迭代(非递归)遍历二叉树 (1).迭代模拟法 前序遍历 中序遍历 后序遍历 (2).空指针标记法 前序遍历 中序遍历 后序 ...

  8. 【数据结构】二叉树的前中后序遍历

    二叉树的三种遍历 1. 创建一棵简单的二叉树 1.1 二叉树结构体实现 1.2 创造一个二叉树结点的函数 1.3 手动创造一棵二叉树 2.为什么要遍历? 3.最重要的知识:由二叉树引出的子问题分析 4 ...

  9. 【Java数据结构】二叉树的前中后序遍历(递归和非递归)

    二叉树的遍历 递归做法 前序遍历 中序遍历 后序遍历 非递归 前序遍历 中序遍历 后序遍历 二叉树遍历是二叉树的一种重要操作 必须要掌握 二叉树的遍历可以用递归和非递归两种做法来实现 递归做法 前序遍 ...

最新文章

  1. 2_vuex状态管理器
  2. 购物搜索引擎架构的变与不变——淘宝网曲琳
  3. DeVeDe:视频 CD 制造利器
  4. android6.0源码分析之Camera API2.0下的Capture流程分析
  5. mysql如何获取当前时间
  6. LeetCode 316. 去除重复字母 / 1081. 不同字符的最小子序列(单调栈)
  7. PHP之MVC项目实战
  8. 面试官这Redis夺命连环12问,谁顶得住?
  9. Qt——P23 登录窗口布局
  10. C#重载操作符==和!=时注意问题
  11. UI设计师的7大能力模型
  12. 工作第九周:勇敢的少年,快去创造奇迹!
  13. <C++>详解类对象作为类成员时调用构造和析构的时机及静态成员解释
  14. 80C51单片机PROTUES仿真C语言数码管点亮
  15. 自动化测试遇到的难点_谈谈我在自动化测试中遇到的坑
  16. 如何修改chrome账号密码自动填充的字体样式
  17. 复旦大学有计算机网络专业,复旦大学计算机网络专业计划..doc
  18. 高端大气的艺术海报的ps教程
  19. 一起学Java虚拟机(一),数据结构java语言描述百度云
  20. 百度AI开放平台人体分析_人像分割的Python示例代码

热门文章

  1. Nginx 端口转发实现!
  2. 阿里云CLI管理域名解析
  3. 开放式激光振镜运动控制器:C++快速开发
  4. 临床药物对大鼠的长期毒性实验
  5. matlab 1e3,Matlab 对 ODE的参数进行 拟合 求助@月只蓝 - 计算模拟 - 小木虫 - 学术 科研 互动社区...
  6. C++const用法总结
  7. 除了ChatGPT,这20款AI神器同样值得你使用
  8. 网络编程懒人入门(九):通俗讲解,有了IP地址,为何还要用MAC地址?
  9. 单声道3W音频功率放大器:8002B
  10. filter: grayscale(%);设置灰色遮罩层后,怎样让头像颜色不受灰色遮罩层影响?