二叉树的递归遍历

二叉树遍历

  • 一,什么是二叉树
  • 二,递归实现
    • 2.1 结点类描述
    • 2.2 三种递归
    • 2.2 测试

一,什么是二叉树

在计算机科学中,二叉树是每个结点最多有两个子树的树结构。通常子树被称作"左子树"(left subtree)和"右子树"(right subtree)。二叉树常被用于实现二叉查找树和二叉堆。

  • 分为链式和顺序储存结构

  • 顺序储存结构

  • 链式结点

二,递归实现

2.1 结点类描述

package com.lovely.binarytree;/*** * @author echo lovely** 2020年6月13日下午4:20:41* * 二叉链式存储结构的结点类描述*/public class BiTreeNode {public Object data; // 存放结点的数据值public BiTreeNode lchild, rchild; // 存放节点的左右孩子地址public BiTreeNode() {this(null, null, null);}public BiTreeNode(Object data) {this(data, null, null);}public BiTreeNode(Object data, BiTreeNode lchild, BiTreeNode rchild) {this.data = data;this.lchild = lchild;this.rchild = rchild;}}

2.2 三种递归

package com.lovely.binarytree;import java.util.LinkedList;/*** * @author echo lovely* * 2020年6月13日下午4:34:53* * 二叉树的三种遍历方式* * 1. 层次遍历* 	自上而下,自左至右* * 2. 先序遍历* 	先访问根节点,在先序遍历左子树,最后先序遍历右子树* * 3. 中序遍历*  先中序遍历左子树,再访问根结点,最后中序遍历右子树*  * 4. 后序遍历*  先后遍历左子树,再后遍历右子树,最后访问根结点*/public class EachTree {// 层次遍历public void order(BiTreeNode root) {if (root == null)return;LinkedList<BiTreeNode> queue = new LinkedList<BiTreeNode>();BiTreeNode current = null;// 根结点入队queue.offer(root);while (!queue.isEmpty()) {// 出队	current = queue.poll();System.out.println(current.data);if (current.lchild != null) // 如果当前节点的左节点不为空 入队queue.offer(current.lchild);if (current.rchild != null)queue.offer(current.rchild);}}// 先序遍历public void preOrder(BiTreeNode root) {if (root != null) {System.out.println(root.data); // 根preOrder(root.lchild); // 左子树preOrder(root.rchild); // 右子树}}// 中序遍历public void inOrder(BiTreeNode root) {if (root != null) {inOrder(root.lchild); // 左子树System.out.println(root.data); // 根inOrder(root.rchild); // 右子树		}	}// 后序遍历public void postOrder(BiTreeNode root) {if (root != null) {postOrder(root.lchild); // 左子树postOrder(root.rchild); // 有子树System.out.println(root.data); // 根结点}}	}

2.2 测试

package com.lovely.binarytree;/*** * @author echo lovely* 2020年6月13日下午5:54:26* * 测试*/public class TestEachTree {public static void main(String[] args) {EachTree et = new EachTree();// 左子树BiTreeNode lchild = new BiTreeNode("lchild", new BiTreeNode("1", null, null), new BiTreeNode("2", null, null));// 右子树BiTreeNode rchild = new BiTreeNode("rchild", new BiTreeNode("3", null, null), new BiTreeNode("4", null, null));// 根结点BiTreeNode root = new BiTreeNode("data", lchild, rchild);System.out.println("先序遍历=====");et.preOrder(root);System.out.println("中序遍历=====");et.inOrder(root);System.out.println("后序遍历=====");et.postOrder(root);System.out.println("层次遍历=====");et.order(root);}}/**
先序遍历=====
data
lchild
1
2
rchild
3
4
中序遍历=====
1
lchild
2
data
3
rchild
4
后序遍历=====
1
2
lchild
3
4
rchild
data
层次遍历=====
data
lchild
rchild
1
2
3
4*/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/420906.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

概率论的公理结构

样本点 一个随机事件出现的可能的结果叫做样本点。 类比平面几何&#xff0c;线、面、体也是由点组成的集合&#xff0c;研究的是点线面关系及性质&#xff0c;同样样本点也是组成事件&#xff08;集合&#xff09;的材料&#xff0c;是集合的基本元素&#xff0c;把这些样本…

python词云的简单使用

词云的生成所需库代码实现wordclod参数说明具体实现效果展示所需库 wordcloud, jieba, imageiowordcloud 词云库&#xff0c;用来统计文本文档里面出现的高频词汇&#xff0c;或者句子&#xff0c;以图片可视化的方式显示出来jieba库&#xff0c;分割中文的库&#xff0c;把较…

(一)Neo4j在Centos7虚拟机上的安装

1、什么是图数据库&#xff1f; 图数据库是基于数学里图论的思想和算法而实现的高效处理复杂关系网络的新型数据库系统。图形数据库善于高效处理大量的、复杂的、互连的、多变的数据。其计算效率远远高于传统的关系型数据库。图形数据库在社交网络、实时推荐、征信系统、人工智…

代码演示 .NET 4.5 自带的 ReadonlyCollection 的使用

代码如下&#xff1a; 1. using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace ConfigurationLibrary {public class ConfigElement{public int Id { get; set; }public string Value { get; set…

(二)Cypher语言常用方法举例

1、概述 “Cypher”是一个描述性的类Sql的图操作语言。相当于关系数据库的Sql&#xff0c;可见其重要性&#xff01;其语法针对图的特点而设计&#xff0c;非常方便和灵活。没有Join&#xff0c;是一大特点&#xff01;学好Cypher是学好Neo4j的关键&#xff0c;也是核心所在&a…

Java高新技术 枚举

&#xfeff;&#xfeff;Java高新技术 枚举 知识概要&#xff1a; (1)为什么要有枚举 (2)枚举的示例 (3)枚举的应用 (4)枚举的高级应用 (1)为什么需要枚举 问题&#xff1a;要定义星期几或性别的变量&#xff0c;该怎么定义&#xff1f; 假设用1-7分别表示星期一到星期日&am…

github 人像卡通化探索项目

把项目下载到本地 下载地址 https://github.com/minivision-ai/photo2cartoon安装依赖库 python 3.7 # 3.x版本都可 pytorch 1.4 tensorflow-gpu 1.14 # tesorflow 得是1.0版本&#xff0c;2.0版本语法部分改变&#xff0c;不然项目运行会出错 face-alignment dlibpytorch …

浅谈城市规划在移动GIS方面的应用发展

1、概述 城市建设进程加快&#xff0c;城市规划管理工作日趋繁重&#xff0c;各种来源的数据产生各种层出不穷的问题&#xff0c;严重影响城市规划时的准确性&#xff0c;为此全面合理的掌握好各方面的城市规划资料才能做出更加科学的决策。移动端的兴起为规划动态方面提供了极…

(四)Neo4j删除数据需要注意的问题

1、先删关系&#xff0c;再删节点 # 删除所有记录 MATCH (n) OPTIONAL MATCH (n)-[r]-() DELETE n,r 2、彻底删除节点标签名&#xff0c;需要删除前期对该标签名建立的索引 # 查看全部索引 :schema# 删除索引 drop index on :Person(id)# 当索引删除不掉时&#xff0c;可能是…

jsp阶段总结

目录web开发jsp是运行在服务器端还是客户端? 服务端 js是运行在服务器端还是客户端? 客户端 jsp的本质是什么? jsp原理 jsp的本质就是servlet jsp在服务器中,当浏览器请求该jsp时,jsp文件在服务器中会经历什么过程? 转译:将jsp文件转译成java文件 编译:将转译后的java文…

CVE-2013-3897漏洞成因与利用分析

CVE-2013-3897漏洞成因与利用分析 1. 简介 此漏洞是UAF&#xff08;Use After Free&#xff09;类漏洞&#xff0c;即引用了已经释放的内存。攻击者可以利用此类漏洞实现远程代码执行。UAF漏洞的根源源于对对象引用计数的处理不当&#xff0c;比如在编写程序时忘记AddRef或者多…

(三)Neo4j自带northwind案例--Cypher语言应用

0、概述 通过该案例&#xff0c;应用Cypher查询语言&#xff0c;感受Neo4j套路。官方的用此案例的用意&#xff1a; The Northwind Graph demonstrates how to migrate&#xff08;迁移&#xff09; from a relational database to Neo4j&#xff08;把一个负责的多表关系数据…

servlet 源码分析

servlet源码分析1. servlet接口1.1 看servlet源码1.2 直接用类实现servlet接口&#xff0c;来写servlet类2. servlet子类GenericServlet2.1 servlet子类实现GenericServlet抽象类2.2 继承GenericServelt抽象类3. httpServelt类分析4. 这么多搬来的代码&#xff0c;最后总结1. s…

RDIFramework.NET 中多表关联查询分页实例

RDIFramework.NET 中多表关联查询分页实例 RDIFramework.NET 中多表关联查询分页实例 RDIFramework.NET&#xff0c;基于.NET的快速信息化系统开发、整合框架&#xff0c;给用户和开发者最佳的.Net框架部署方案。该框架以SOA范式作为指导思想&#xff0c;作为异质系统整合与互操…

(五)官方Neo4j 3.3.9 Java API例子

0、概述 本文以Neo4j 3.3.9为基础&#xff0c;采用https://neo4j.com/docs/api/java-driver/current/给出的官方例子。下面大概记录下工程建立的过程&#xff0c;因为版本差异代码和官方给出的稍有差别。 1、使用eclipse&#xff0c;用自己安装的mvn新建一个mvn工程&#xff…

(六)Neo4j综合项目

0、概述 本文以热播电视剧《人民的名义》中的人物关系为数据基础&#xff0c;抛开案例本身的内容&#xff0c;本项目的意义在于指出使用Neo4j数据库的一般流程是什么&#xff1f;包括数据的导入、操作、查询、展示&#xff0c;从而体会出与传统数据库相比Neo4j在处理图数据的巨…

过滤器filter,监听器listener

目录1. filter过滤器1.1 原理1.2 配置1.3 过滤掉脏话demo2. listener监听器2.1 作用2.2 ServletContextListener demo1. filter过滤器 作用:过滤servlet&#xff0c;jsp&#xff0c;js&#xff0c;css&#xff0c;图片对象&#xff0c;以及一切在服务器&#xff0c;客户端想访…

LevelDB 之 arena

粒度比较大&#xff0c;实现简洁清晰明了。对比nginx的&#xff0c;nginx从小到大各种尺寸都有&#xff0c;适用性更好一些。相对要精细很多。Arena.h//z 2014-06-05 10:48:50 L.20947470 BG57IV3 T1840949363.K.F1370514324[T6,L108,R4,V118]// Copyright (c) 2011 The LevelD…

(一)elasticsearch6.1.1安装详细过程

1、配置java环境 检查java环境 满足elasticsearch6.1.1java环境要求&#xff1b; 2、安装ElasticSearch6.1.1 ①为es新生成用户、用户组 su root groupadd esgroup useradd ela -g esgroup -p 5tgbhu8[rootlocalhost fibonacci]# su ela Attempting to create directory /h…

使用jdk DOM,SAX和第三方jar包DOM4J创建,解析xml文件

xml的创建&#xff0c;解析1. 什么是xml文件1.1 什么是xml文件1.2 解析xml的方式&#xff0c;优缺点2. 使用dom操作xml文件2.1 使用dom创建xml文件2.2 使用dom解析xml文件2.3 使用dom对xml文件增删改3. 使用SAX解析xml文件4. 使用DOM4J操作xml文件4.1 使用DOM4J创建xml文件4.2 …