先序:每一棵子树的打印的顺序都是:头--左--右

递归实现先序打印:

public static void prePrint(Node head) {if (head == null) {return;}System.out.println(head.value);prePrint(head.left);prePrint(head.right);
}

中序:每一棵子树的打印的顺序都是:左--头--右

递归实现中序打印:

public static void inPrint(Node head) {if (head == null) {return;}inPrint(head.left);System.out.println(head.value);inPrint(head.right);
}

后序:每一棵子树的打印的顺序都是:左--右--头

递归实现后序打印:

public static void posPrint(Node head) {if (head == null) {return;}posPrint(head.left);posPrint(head.right);System.out.println(head.value);
}

思考:由此发现,先序打印、中序打印、后续打印都是用递归实现,似乎都是由一个函数变化而来,不同点在于输出的打印语句位置不同

引出递归序(重点理解):

递归序:先序中序后序的实现就是依靠递归序,先序(第一次打印)中序(第二次打印)后序(第三次打印)------>递归序任意节点的数据遍历都到三次

什么意思呢?举个例子如下:

Eg:三个节点的二叉树(节点a,b,c),a是头节点,b是a的left节点,c是a的right节点

递归序遍历该二叉树:由头节点a开始,调用函数f(a),第一次打印”a“,然后b节点,第一次打印”b“,b节点左节点为null,返回b节点,第二次打印”b“,b节点的右节点为null,再次返回b节点,第三次打印”b“,b节点的部分递归完成,回到a节点,第二次打印”a“,然后是a的右节点c,依次递归带调用,最终递归序的结果为:a--b--b--b--a--c--c--c--a

即:在递归序中控制打印位置即可实现先序、中序、后序(递归序中每个节点出现三次)。

 先序:第一次出现就打印;中序:第二次出现打印;后序:第三次出现才打印

先序、中序、后序、递归序(重要)相关推荐

  1. 二叉树先、中、后遍历递归+非递归

    文章目录 前言 思路 设计思想 非递归前序遍历的思路 非递归中序遍历的思路 非递归后序遍历的思路 层序遍历的思路 完整代码 MyBinaryTree.h MyBinaryTree.cpp Main.c ...

  2. 前序中序转后序,后序中序转前序,前序后序转中序

    将前序序列存入pre数组,中序序列存入in数组,后序序列存入post数组,则: 前序中序->后序 #include <cstdio> using namespace std; int ...

  3. 二叉树的前序中序后序遍历(当然是非递归的!)

    二叉树的三种遍历方式一直都是为人津津乐道的面试题,考察一个人对递归的理解让他写个三种遍历方式是最简单的考察方式了,那么考察一个人对递归的理解更加深层次的方式就是让他用循环模拟递归(就是把递归代码转换成 ...

  4. 二叉树 —— 创建二叉树 先序遍历 、中序遍历、后序遍历(递归方式、非递归方式)

    #include<stdio.h> #include<malloc.h> #include<stdlib.h> typedef char DataType; #de ...

  5. 二叉树的前序,中序,后序,层序遍历的递归和非递归实现

    直接上代码 import java.util.Stack;public class BinaryTree {//定义一棵二叉树,包括左子树.右子树.该节点的值和构造器public BinaryTree ...

  6. PAT甲级1020 Tree Traversals:[C++题解]树的遍历、由中序序列和后序序列递归建树

    文章目录 题目分析 题目链接 题目分析 题意重述:给定一棵二叉树的后序遍历序列和中序遍历序列,让求层次遍历的序列. 分析: 后序遍历:先 左子树.右子树 ,最后再遍历根结点. 中序遍历:先左子树,再根 ...

  7. 105从前序与中序遍历序列构造二叉树 106 从中序与后序遍历序列构造二叉树 (递归 + 哈希)

    引言 这两道题主要是考察二叉树遍历的掌握,即由前序和中序推出原二叉树,由后序和中序推出原二叉树,这里先来说一下推导过程: 前序和中序 知道前序遍历和中序遍历,如何推原二叉树?(直接是结论,可以自行推导 ...

  8. 002 前、中、后序遍历二叉树(递归迭代)

    1.递归法 ① 前序遍历二叉树 ② 中序遍历二叉树 ③ 后序遍历二叉树 2.迭代法 ① 前序遍历二叉树 ② 中序遍历二叉树 ③ 后序遍历二叉树 类似前序遍历,先"中→右→左"遍历二 ...

  9. java中二叉树_Java工程师面试1000题224-递归非递归实现二叉树前、中、后序遍历...

    224.使用递归和非递归实现二叉树的前.中.后序遍历 使用递归来实现二叉树的前.中.后序遍历比较简单,直接给出代码,我们重点讨论非递归的实现. class Node { public int valu ...

最新文章

  1. 获得客户端的时区(get client-side time zone by JS)
  2. 郑州银行评选神策数据为“最佳年度合作伙伴”
  3. VTK:可视化之AnnotatedCubeActor
  4. 深入理解nodejs中的异步编程
  5. android R.id.转化为view
  6. 带有示例的Python date strftime()方法
  7. 5000系列组装拆卸单成本
  8. 二元最佳前缀码_信息与编码系列(二)最优码——Huffman码
  9. 【数据结构】串(定长顺序串、堆串、块链串)的存储结构及基本运算(C语言)
  10. 东京大学情报理工学系研究科招生海报
  11. Midjourney|文心一格prompt教程[基础篇]:注册使用教程、风格设置、参数介绍、隐私模式等
  12. r1音箱原生系统更改服务器,低门槛不破坏R1功能改AUX音源电脑喇叭[已更新完整]...
  13. Bootstrap3 缩略图( thumbnail )
  14. 如何高效设计游戏——关于战斗力计算方式的总结
  15. java游戏开发入门(十) -粒子特效
  16. 淘宝发布 18 年 18 件“时代宝贝”:胶卷、万能充、MP3 等
  17. Educoder头歌-Linux vi/vim编辑器
  18. 已阅论文汇总:刀具磨损测量/磨损检测/磨钝标准
  19. C++实现指针式时钟Sample
  20. 飞信免费发短信API

热门文章

  1. ie浏览器rgba不能显示的一种情况
  2. 房产管理系统平台平台管理分析
  3. 睡眠健康与肠道健康之间的双向联系
  4. 台式计算机经常使用的硬盘是什么尺寸,台式机硬盘和笔记本硬盘能通用吗?有什么区别?...
  5. android端集成FTP文件下载功能
  6. 新一代智能手机发布前,iPhone地位无法撼动
  7. 创造与魔法维护服务器奖励,创造与魔法5月最新兑换码大全 创造与魔法礼包码2021及使用方法一览...
  8. 监理工程师岁月--崔氏家族
  9. MySQL多表事务(三)
  10. 综合型集团该如何利用数字化转型支撑磅礴多元的服务?