本文介绍了Java二进制搜索树遍历操作. 与您分享以供参考,如下:

前言: 在Java Binary Search Tree Basics的上一节中,我们了解了该树及其相关知识,并对Binary Search Tree进行了基本实现. 下面我们继续改进我们的二进制搜索树.

对于二叉树,有深度遍历和宽度遍历. 深度遍历具有三种前序,中阶和后序遍历方法. 广度遍历就是我们通常所说的分层遍历,如图所示:

由于树本身的定义是递归定义,因此我们使用递归方法来实现前顺序,中顺序和后顺序的三个遍历. 对于广度优先遍历二叉排序树 遍历,我们需要选择其他数据结构. 排队以实现广度优先遍历.

四个基本遍历思想是:

遍历顺序: 根节点--->左子树--->右子树

按顺序遍历: 左子树--->根节点--->右子树

后遍历: 左子树->右子树->根节点

层遍历: 从上到下,从左到右.

例如,以下二进制树的各种遍历:

遍历顺序: 5-3-2-4-6-8

有序遍历: 2-3-4-5-6-8

后遍历: 2-4-3-8-6-5

遍历水平: 5-3-6-2-4-8

根据上面提到的遍历思想: 根节点--->左子树--->右子树,代码实现如下:

//二分搜索树的前序遍历(前序遍历:根结点 ---> 左子树 ---> 右子树)

public void preOrder() {

preOrder(root);

}

//前序遍历以node为根的二分搜索树,递归算法

private void preOrder(Node node) {

if (node == null) {

return;

}

System.out.println(node.e);

preOrder(node.left);

preOrder(node.right);

}

根据上面提到的遍历思想: 左子树--->根节点--->右子树,代码实现如下:

//二分搜索树的中序遍历(中序遍历:左子树---> 根结点 ---> 右子树)

public void inOrder() {

inOrder(root);

}

//中序遍历以node为根的二分搜索树,递归算法

private void inOrder(Node node) {

if (node == null) {

return;

}

inOrder(node.left);

System.out.println(node.e);

inOrder(node.right);

}

根据上面提到的遍历思想: 左子树--->右子树--->根节点二叉排序树 遍历,代码实现如下:

//二分搜索树的后序遍历(后序遍历:左子树 ---> 右子树 ---> 根结点)

public void postOrder() {

postOrder(root);

}

//后序遍历以node为根的二分搜索树,递归算法

private void postOrder(Node node) {

if (node == null) {

return;

}

postOrder(node.left);

postOrder(node.right);

System.out.println(node.e);

}

对于分层遍历,我们基于队列来实现,其思想如下:

(1)首先将根节点添加到队列中

(2)对于其他任何随机节点,请在它们离开队列时进行访问(假设左右子节点不为空,请输入队列)

代码实现如下:

//层次遍历--(基于队列实现)

public void levelOrder() {

Queue q = new LinkedList<>();

q.add(root);

while (!q.isEmpty()) {

Node cur = q.remove();

System.out.println(cur.e);

if (cur.left != null) {

q.add(cur.left);

}

if (cur.right!=null){

q.add(cur.right);

}

}

}

源代码地址

更多对Java算法相关内容感兴趣的读者可以查看该站点的主题: “ Java数据结构和算法教程”,“在Java中操作DOM节点的技术摘要”,“用于操作Java文件和技术的技术摘要”. 目录”和“ Java Cache操作技巧摘要”

我希望本文对Java编程的每个人都有帮助.

本文来自电脑杂谈,转载请注明本文网址:

http://www.pc-fly.com/a/jisuanjixue/article-212668-1.html

java 树 广度优先遍历_Java二进制搜索树遍历操作的详细描述[前,中,后,层次,广度优先遍历]...相关推荐

  1. 转载:二叉树的前中后和层序遍历详细图解(递归和非递归写法)

    二叉树的前中后和层序遍历详细图解(递归和非递归写法) Monster_ii 2018-08-27 17:01:53 50530 收藏 403 分类专栏: 数据结构拾遗 文章标签: 二叉树 前序 中序 ...

  2. JAVA 二叉树 常见操作合集(前中后序递归非递归遍历 层序遍历 求深度宽度 判断兄弟结点 堂兄弟节点)

    今天复习了二叉树的相关操作,整理归纳如下. 二叉树结点定义 //节点类private static class TreeNode{private int val = 0;private TreeNod ...

  3. 二叉树前中后序遍历以及节点计算

    二叉树前中后序遍历以及节点计算 二叉树 分类 二叉链的数据结构 三叉链的数据结构 四种遍历方法 深度优先遍历:前中后序 广度优先遍历:层序遍历 计算 节点个数 叶子节点个数 树的高度 第k层的节点个数 ...

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

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

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

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

  6. java 建树源码_Java实现的二叉树常用操作【前序建树,前中后递归非递归遍历及层序遍历】...

    import java.util.ArrayDeque; import java.util.Queue; import java.util.Stack; //二叉树的建树,前中后 递归非递归遍历 层序 ...

  7. java建树_Java实现的二叉树常用操作【前序建树,前中后递归非递归遍历及层序遍历】...

    本文实例讲述了Java实现的二叉树常用操作.分享给大家供大家参考,具体如下: import java.util.ArrayDeque; import java.util.Queue; import j ...

  8. 二叉树的前,中,后序遍历(思路分析) [Java][数据结构]

    二叉树的前,中,后序遍历(思路分析) 前序遍历: 先输出父节点, 再遍历左子树和右子树 中序遍历: 先遍历左子树, 再输出父节点,再遍历右子树 后序遍历: 先遍历左子树,再遍历右子树,最后输出父节点 ...

  9. LeetCode——树:层次遍历、前中后序遍历

    LeetCode--树:层次遍历.前中后序遍历 目录 层次遍历 二叉树的层平均值 找树左下角的值 前中后序遍历 概述 非递归实现二叉树的前序遍历 非递归实现二叉树的中序遍历 非递归实现二叉树的后序遍历 ...

最新文章

  1. Pycharm+Anacond安装完成后的Python文件创建以及No module named 'bs4'.
  2. Cocos2d-X中实现菜单特效
  3. 如何使Sybase ASE中对象名不区分大小写?
  4. table中head表头固定,body滚动
  5. 11深入理解C指针之---指针和常量
  6. Ardino基础教程 21_最简单最快控制LCD1602
  7. 中国唯一入选 Forrester 领导者象限,阿里云 Serverless 全球领先
  8. [技术回顾系列]--认识WebService全貌
  9. ReactNative入门之android与rn初始化参数的传递
  10. python学习——numpy库
  11. 电脑重装系统需要全盘格式化吗?这个事项需要看情况
  12. Python爬虫基础-02-提取数据
  13. 三星手机真假测试软件,#三星EVO Plus MicroSD存储卡# 火眼金睛识真伪、评测软件测性能...
  14. 元宇宙游戏控制这几个因素,正确姿势解锁元宇宙游戏开发盈利痛点
  15. python drop用法_Python drop方法删除列之inplace参数实例
  16. 导入Zip bomb detected
  17. 电脑重装系统后,重启时遇到错误,报错需要重新启动,并重新安装系统
  18. 光阴似锦,关于身体保养的那些事
  19. 阿里云携手创业黑马,“双百计划”赋能百城万企创新转型
  20. 真人口播视频号:流量不愁,变现才是重中之重丨国仁网络

热门文章

  1. 乱序和屏障1 : 总览 及 编译器内存屏障
  2. 毛泽东《浪淘沙·北戴河》气势磅礴
  3. pipeline与make_pipeline
  4. Ubuntu language bar / 语言栏不显示的处理
  5. 手把手教你Nginx常用模块详解之ngx_http_status_module(十一)
  6. 京津冀计算机学科大学排名,京津冀十强高校排名,这三所大学进入前十,实力强悍...
  7. 两种常用的参考图像质量评价指标——超分辨率(五)
  8. CSDN 编程竞赛十八期题解
  9. 带头结点双向循环 -- 双向链表
  10. 双向带头循环链表-实现思路+图解