一、先序递归遍历(Preorder Recursive Traversal)

1.1 算法

  首先需要明确的是这里的序是针对 root 节点而言的。故先序即先“访问”根节点,其次“访问”其左右节点。

1.2 图示

1.3 代码

  Talk is cheap, show me the code!    -- Linus Benedict Torvalds

     public void preOrder(Node<E> root){
if(root != null) {
System.out.print(root.data);
System.out.print('\t');
preOrder(root.lnode);
preOrder(root.rnode);
}
}

二、中序递归遍历(Inorder Recursive Traversal)

2.1 算法

  从根节点 root 出发,先“访问”左子树(Left Subtree),当左子树的每个节点都“访问”完后,才访问根节点,最后“访问”右子树(Right Subtree)。

2.2 图示

2.3 代码

  public void inOrder(Node<E> root){
if(root != null) {
//track to the deepest left branch
inOrder(root.lnode);
//visit the root node
System.out.print(root.data);
System.out.print('\t');
inOrder(root.rnode);
}
}

三、后序递归遍历(Postorder Recursive Traversal)

3.1 算法

  根节点是最后“访问”的,不管是在根节点所在的整棵树,还是根节点以下的子树都是先“访问”左子树中的节点,其次是右子树中节点,最后“访问”根节点。

3.2 图示

3.3 代码

     public void postOrder(Node<E> root){
if(root != null) {
//track to the deepest left branch
postOrder(root.lnode);
//track to the deepest right branch
postOrder(root.rnode);
//after visiting all the nodes of both left subtree and right subtree
System.out.print(root.data);
System.out.print('\t');
}
}

注意:层次遍历不能递归,可以结合递归条件想想为什么哦 :)

keep reading ,keep learning, keep coding…

数据结构之二叉树篇卷二 -- 二叉树递归遍历(With Java)的更多相关文章

  1. 数据结构二叉树的递归与非递归遍历之java,javascript,php实现可编译(1)java

    前一段时间,学习数据结构的各种算法,概念不难理解,只是被C++的指针给弄的犯糊涂,于是用java,web,javascript,分别去实现数据结构的各种算法. 二叉树的遍历,本分享只是以二叉树中的先序 ...

  2. 二叉树3种递归和非递归遍历(Java)

    import java.util.Stack; //二叉树3种递归和非递归遍历(Java) public class Traverse { /******************一二进制树的定义*** ...

  3. 数据结构之二叉树篇卷三 -- 二叉树非递归遍历(With Java)

    Nonrecursive Traversal of Binary Tree First I wanna talk about why we should <code>Stack</c ...

  4. 数据结构之二叉树篇卷四 -- 二叉树线索化(With Java)

    一.线索二叉树简介 二叉树本身是一种非线性结构,然而当你对二叉树进行遍历时,你会发现遍历结果是一个线性序列.这个序列中的节点存在前驱后继关系.因此,如何将这种前驱后继信息赋予给原本的二叉树呢?这就是二 ...

  5. 【简单数据结构】二叉树的建立和递归遍历--洛谷 P1305

    题目描述 输入一串二叉树,用遍历前序打出. 输入格式 第一行为二叉树的节点数n.(n \leq 26n≤26) 后面n行,每一个字母为节点,后两个字母分别为其左右儿子. 空节点用*表示 输出格式 前序 ...

  6. 二叉树的建立与递归遍历C语言版

    </pre><pre name="code" class="cpp">#include <stdio.h> #include ...

  7. (实用篇)PHP不用递归遍历目录下所有文件的代码

    <?php /** * PHP 非递归实现查询该目录下所有文件 * @param unknown $dir * @return multitype:|multitype:string */ fu ...

  8. 二叉树遍历(Java实现)

    二叉树遍历(Java实现)   主要是二叉树的遍历,包括递归遍历和非递归遍历 import java.util.ArrayDeque; import java.util.ArrayList; impo ...

  9. 数据结构(3) 第三天 栈的应用:就近匹配/中缀表达式转后缀表达式 、树/二叉树的概念、二叉树的递归与非递归遍历(DLR LDR LRD)、递归求叶子节点数目/二叉树高度/二叉树拷贝和释放

    01 上节课回顾 受限的线性表 栈和队列的链式存储其实就是链表 但是不能任意操作 所以叫受限的线性表 02 栈的应用_就近匹配 案例1就近匹配: #include <stdio.h> in ...

随机推荐

  1. C# HTTP系列13 以form-data方式上传多个文件以及键值对集合到远程服务器

    系列目录     [已更新最新开发文章,点击查看详细] 类似于以下场景,将表单中的用户信息(包含附件)上传到服务器并保存到数据库中, <form id="form1" run ...

  2. Cassandra查询操作趟坑记录

    例子表 CREATE TABLE employee ( name TEXT, age SMALLINT, phone TEXT, bornDate DATE, createDate timestamp ...

  3. 单选多选(CocosCreator)

    推荐阅读:  我的CSDN  我的博客园  QQ群:704621321 1.前沿       首先来说说我们的需求吧:随机出现单选题或者多选题,完全回答正确才算正确(多选题中少选错选算错),核实答案的 ...

  4. unity游戏开发_对象池

    现在假设游戏中我们需要实现一个这样功能,按下鼠标左键,发射一颗子弹,3秒之后消失.在这个功能中,我们发射了上百上千发子弹,就需要实例化生成上百上千次.这时候,我们就需要使用对象池这个概念,每次实例化生 ...

  5. 【原创】Linux Suspend流程分析

    背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: Kernel版本: ...

  6. MSIL实用指南-Action的生成和调用

    MSIL实用指南-Action的生成和调用 System.Action用于封装一个没有参数没有返回值的方法.这里生成需要Ldftn指令. 下面讲解怎生成如下的程序. class ActionTest ...

  7. Asp.net之MsChart控件动态绑定温度曲线图

    <div> <div style="position: absolute; z-index: 200; background-color: #FFFFFF; height: ...

  8. java基础-多线程二

    java基础-多线程二 继承thread和实现Runnable的多线程每次都需要经历创建和销毁的过程,频繁的创建和销毁大大影响效率,线程池的诞生就可以很好的解决这一个问题,线程池可以充分的利用线程进行 ...

  9. Python和Sublime安装教程

    Python安装 安装python可以去https://www.python.org官网下载 点开官网后点击下图我圈出来的地方 然后翻到页面最后,选择要安装的版本 点击下载后打开,将 Add  Pyt ...

  10. 【4】Logistic回归

    前言 logistic回归的主要思想:根据现有数据对分类边界建立回归公式,以此进行分类 所谓logistic,无非就是True or False两种判断,表明了这其实是一个二分类问题 我们又知道回归就 ...