树的基本术语

  • 结点(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. Python3基础教程(十五)—— PEP8 代码风格指南

    编程语言不是艺术,而是工作或者说是工具,所以整理并遵循一套编码规范是十分必要的. 这篇文章原文实际上来自于这里:https://www.python.org/dev/peps/pep-0008/ 有很 ...

  2. index 定义 v-for 未使用变量 实际是没有 :key="index"

    需要有 :key="index" <Checkbox :label="item.key" :key="index" v-for=&qu ...

  3. 线性判别分析(LDA)

    降维的作用: 高维数据特征个数多,特征样本多,维度也很大,计算量就会很大,调参和最后评估任务时,计算量非常大,导致效率低. 高位数据特征特别多,有的特征很重要,有的特征不重要,可以通过降维保留最好.最 ...

  4. python读取绝对路径的三种方式

    import pandas as pd dood_inf0=pd.read_csv("C:\\Users\\Administrator\\Desktop\\food_info.csv&quo ...

  5. 【原创翻译】链接DLL至可执行文件---翻译自MSDN

    可执行文件.exe链接(或加载)DLL有以下两种形式: 隐式链接 显式链接 隐式链接是指静态加载或在程序加载时动态链接. 通过隐式链接,在使用DLL时,可执行文件链接到一个由生成DLL的人提供的导入函 ...

  6. [JOYOI] 1096 数字组合

    题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了.幸运的是 ...

  7. [POJ] 2223 Muddy Fields

    Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 11490 Accepted: 4270 Description Rain has ...

  8. IP封包协议头/TCP协议头/TCP3次握手/TCP4次挥手/UDP协议头/ICMP协议头/HTTP协议(请求报文和响应报文)/IP地址/子网掩码(划分子网)/路由概念/MAC封包格式

    IP协议头IP包头格式: 1.版本号:4个bit,用来标识IP版本号.这个4位字段的值设置为二进制的0100表示IPv4,设置为0110表示IPv6.目前使用的IP协议版本号是4. 2.首部长度:4个 ...

  9. linux 文件三大特殊权限(SUID SGID SBIT)

    SGID(这个应该是文件共享里面最常用权限管理手段) 作用于目录或可执行程序,作用于目录代表在此目录创建的文件或目录,默认的属组继承此目录的属组.例如 我这个testgroup 没有设置SGID .我 ...

  10. php 复制文件夹

    public function recurse_copy($src,$des) { $dir = opendir($src); @mkdir($des); while(false !== ( $fil ...