树的基本术语

  • 结点(node)由数据元素以及指向子树的地址构成。
  • 若 X 结点有子树,则子树的根结点称为 X 的孩子(child)结点,相应地,
    X 称为其孩子的双亲(parents)结点,又称父母结点。
  • 同一双亲的孩子结点之间互称兄弟(sibling)结点。
  • 叶子(leaf)结点是指度为 0 的结点,又称为终端结点。其他的叫分支结点

二叉树的定义

二叉树由一个根结点或两棵互不相交的、分别称为左子树和右子树的子二叉树构成。

二叉树的性质

  • 二叉树的结点最多只有两棵子树
  • 若根结点的层次为 1,则二叉树第 i 层的结点数目最多为 2i-1(i≥1)个。
  • 在深度为 k 的二叉树中,至多有 2k -1 个结点(k≥0)。
  • 二叉树中,若叶子结点数为 n0,度为 2 的结点数为 n2,则有 n0=n2+1。

  • 满二叉树:一棵深度为 k 的满二叉树(full binary tree)是具有 2k -1 (k≥0)个结点的二叉树。满二叉树每一层的结点数目都达到最大值.

  • 完全二叉树:一棵具有 n 个结点深度为 k 的二叉树,如果它的每一个结点都与深度为 k 的满二叉树中编
    号为 1~n 的结点一一对应,则称这棵二叉树为完全二叉树(complete binary tree)

二叉树的存储结构

二叉树的存储结构有两种:顺序存储结构和链式存储结构。

顺序存储

二叉树的顺序存储结构适用于完全二叉树,对完全二叉树进行顺序编号,将编号为 i 的结
点存放在数组下标为 i-1 的位置上.

链式存储

一般情况下,采用链式存储结构来存储二叉树。每个结点有 3 个域:

  • data 表示结点的数据元素。
  • left 指向该结点的左孩子结点,即左子树的根结点。
  • right 指向该结点的右孩子结点,即右子树的根结点。

二叉树的遍历

先根序遍历(DLR)

访问根结点,遍历左子树,遍历右子树。表达式的前缀表示(波兰式)

中根序遍历(LDR)

遍历左子树,访问根结点,遍历右子树。表达式的中缀表示

后根序遍历(LRD)

遍历左子树,遍历右子树,访问根结点。表达式的后缀表示(逆波兰式)

参考图书: 《算法与数据结构》

【Java源码】树-概述的更多相关文章

  1. (一)一起学 Java Collections Framework 源码之 概述

    . . . . . 目录 (一)一起学 Java Collections Framework 源码之 概述 JDK 中很多类 LZ 已经使用了无数次,但认认真真从源码级研究过其原理的还只占少数,虽然从 ...

  2. Java源码解读(一)——HashMap

    HashMap作为常用的一种数据结构,阅读源码去了解其底层的实现是十分有必要的.在这里也分享自己阅读源码遇到的困难以及自己的思考. HashMap的源码介绍已经有许许多多的博客,这里只记录了一些我看源 ...

  3. JVM之---Java源码编译机制

    Sun JDK中采用javac将Java源码编译为class文件,这个过程包含三个步骤:     1.分析和输入到符号表(Parse and Enter)    Parse过程所做的工作有词法和语法分 ...

  4. Java源码系列2——HashMap

    HashMap 的源码很多也很复杂,本文只是摘取简单常用的部分代码进行分析.能力有限,欢迎指正. HASH 值的计算 前置知识--位运算 按位异或操作符^:1^1=0, 0^0=0, 1^0=0, 值 ...

  5. java源码——文件读写和单词统计

    本文要解决的问题:"键盘输入一段英语语句,将这段话写入content.txt中,然后输出这段话,并且统计语句中英文单词的数目以及各个单词出现的次数." 分析问题知,核心是文件读写和 ...

  6. 如何阅读Java源码 阅读java的真实体会

    刚才在论坛不经意间,看到有关源码阅读的帖子.回想自己前几年,阅读源码那种兴奋和成就感(1),不禁又有一种激动. 源码阅读,我觉得最核心有三点:技术基础+强烈的求知欲+耐心.   说到技术基础,我打个比 ...

  7. Android反编译(一)之反编译JAVA源码

    Android反编译(一) 之反编译JAVA源码 [目录] 1.工具 2.反编译步骤 3.实例 4.装X技巧 1.工具 1).dex反编译JAR工具  dex2jar   http://code.go ...

  8. 如何阅读Java源码

    刚才在论坛不经意间,看到有关源码阅读的帖子.回想自己前几年,阅读源码那种兴奋和成就感(1),不禁又有一种激动.源码阅读,我觉得最核心有三点:技术基础+强烈的求知欲+耐心. 说到技术基础,我打个比方吧, ...

  9. Java 源码学习线路————_先JDK工具包集合_再core包,也就是String、StringBuffer等_Java IO类库

    http://www.iteye.com/topic/1113732 原则网址 Java源码初接触 如果你进行过一年左右的开发,喜欢用eclipse的debug功能.好了,你现在就有阅读源码的技术基础 ...

  10. Programming a Spider in Java 源码帖

    Programming a Spider in Java 源码帖 Listing 1: Finding the bad links (CheckLinks.java) import java.awt. ...

随机推荐

  1. Java练习题02

    问题: 编程求一个整数数组的最大值.最小值.平均值和所有元素的和. 代码: public class Page99{     public static void main(String args[] ...

  2. ios水果风暴游戏源码项目下载

    这是一款ios水果风暴游戏源码下载,介绍给大家一下,喜欢的朋友可以下载学习一下吧.应用介绍:这是一个以获得高分和挑战更高难度为目的的游戏.游戏中有九种不同的卡通水果,您可以交换屏幕中两个相邻水果的位置 ...

  3. (转)SpringMVC学习(七)——Controller类的方法返回值

    http://blog.csdn.net/yerenyuan_pku/article/details/72511844 本文所有案例代码的编写均建立在前文SpringMVC学习(六)——SpringM ...

  4. docker 应用数据的管理之bind mounts

    创建容器使用bind mounts 挂载文件系统.宿主机文件系统会覆盖掉容器里初始数据 [root@localhost ~]# mkdir /www/htpm -pv mkdir: 已创建目录 &qu ...

  5. django 数据库的一些操作

    1.数据过滤: 使用filter()方法 >>> Publisher.objects.filter(name='Apress') [<Publisher: Apress> ...

  6. bzoj 1098 [POI2007] 办公楼 biu

    # 解题思路 画画图可以发现,只要是两个点之间没有相互连边,那么就必须将这两个人安排到同一个办公楼内,如图所示: 那,我们可以建立补图,就是先建一张完全图,然后把题目中给出的边都删掉,这就是一张补图, ...

  7. SCI journals on Energy

    SCI journals on Energy Table of Contents 1. SCI- Clarivate - Thomson Reuters 1 SCI- Clarivate - Thom ...

  8. solr之windws下搭建solr服务

    安装Solr 首先保证已经正确安装了Java 下载Solr,当前最新版6.1.0 Solr各个版本下载地址 Solr从6.0之后需要Java1.8所以如果使用Solr6.0及其以上版本,请确保Java ...

  9. 如何在小程序实现图片lazy-load懒加载效果

    自从跳一跳出现之后小程序又开始频繁出现了,在学习过程中发现小程序虽然好但是由于api不完善导致开发过程中有很多的坑,重点是网上相对小程序出现坑时解决方案显然比较少,小程序最让人觉得痛心疾首之一就是无法 ...

  10. MyBatis 3 分页

    利用MyBatis 3进行分页,选定的数据库表c_province,有3列,id列,provinceid列,province列,用Oracle数据库.首先建立一个对应的实体类,Province有3个属 ...