博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
5.2二叉搜索树遍历(前序、中序、后序、层次、广度优先遍历)
阅读量:7169 次
发布时间:2019-06-29

本文共 2086 字,大约阅读时间需要 6 分钟。

 

前言:在上一节中,我们对树及其相关知识做了了解,对二叉搜索树做了基本的实现,下面我们继续完善我们的二叉搜索树。

对于二叉树,有深度遍历和广度遍历,深度遍历有前序、中序以及后序三种遍历方法,广度遍历即我们寻常所说的层次遍历,如图:

因为树的定义本身就是递归定义,所以对于前序、中序以及后序这三种遍历我们使用递归的方法实现,而对于广度优先遍历需要选择其他数据结构实现,本例中我们使用队列来实现广度优先遍历。

四种基本的遍历思想为:

前序遍历:根结点 ---> 左子树 ---> 右子树

中序遍历:左子树---> 根结点 ---> 右子树
后序遍历:左子树 ---> 右子树 ---> 根结点
层次遍历:从上到下,从左到右。

比如,以下二叉树的各种遍历:

前序遍历: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); } } }

posted on
2019-04-09 19:00 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/wfaceboss/p/10678988.html

你可能感兴趣的文章
unity自带的水
查看>>
LVS搭建过程中需要用到的命令-- ipvsadm
查看>>
【No.9 内存泄漏了么】
查看>>
想成为一名DBA 至少要具备哪些技术
查看>>
CentOS 编译安装php5.5, 并配制支持apach,nignx核心代码
查看>>
第3章 初探HTML
查看>>
基于S/MIME V2标准的加密和解密的控件software IP*Works! S/MIME
查看>>
mysql 备份数据库脚本
查看>>
Linux文件系统上的特殊权限
查看>>
IBM携手红帽将助力企业加快虚拟化步伐
查看>>
8.C++引用
查看>>
利用imgateaselect插件实现前端页面图片截取功能
查看>>
Java super()
查看>>
xinetd服务介绍及配置
查看>>
在Redis-Sentinel的client-reconfig-script脚本中设置VIP
查看>>
服务器资源使用情况统计--脚本
查看>>
Oracle查询数据库的索引字段以及查询用索引
查看>>
第二讲、实例变量可见度、方法
查看>>
zabbix监控基础知识
查看>>
mysql四:数据操作
查看>>