一、树 Tree

二、二叉树 Binary Tree

二叉树遍历原理

二叉树的遍历是指从根节点出发,按照某种次序依次访问二叉树中所有节点,使得每个节点被访问一次且仅被访问一次。

二叉树的遍历方式可以很多,如果我们限制了从左到右的习惯方式,那么主要就分为4中:

1、前序遍历

先访问根节点,然后前序遍历左子树,再前序遍历右子树。

2、中序遍历

从根节点开始(注意不是先访问根节点),中序遍历根节点的左子树,然后访问根节点,最后中序遍历右子树。

三、二叉查找树

二叉查找树,英文binary search tree,简称BST,查找一个节点所需的最大次数等于二叉查找树的高度。

二叉查找树有一个根节点(root),比根节点小的放到根节点的左侧,变成根节点的左子节点(left),大于等于根节点的放到根节点的右侧,变成根节点的右子节点(right)。如此,新元素通过与已有节点不断比较,从而找到自己的位置。

二叉查找树有一个很大的缺陷就是,假如新添加的元素是越来越大的或者越来越小的,则二叉查找树就会侧重一边,这时查找性能严重下降(侧重一边相对于左右平衡,查找元素时会多一倍的性能消耗)。

红黑树,英文red black tree,是一种自平衡的二叉查找树。

红黑树除了符合二叉查找树的基本特性外,还有自己的5个特性:

1、每个节点颜色,要么是黑色,要么是红色

2、根节点是黑色

3、叶子节点是黑色的空节点(nil节点)

4、红色节点的子节点都是黑色

5、对每一个节点来说,从这个节点到其每个叶子节点的所有路径都包含相同数量的黑色节点。

红黑树会通过三种方式对平衡进行修正,变色、左旋、右旋。

如果一个红黑树向右倾斜,就左旋,反之,就右旋。

左旋动图:

右旋动图:

用语言真是不可描述。

多路查找树

多路查找树,其每一个节点的孩子数可以多于两个,且每一个节点处可以存储多个元素。

有4中特殊形式:2-3树、2-3-4树、B树和B+树。

2-3树

获取集合、数组后要判断为空的必要性以及根据构造器创建对象后不是null的证实的更多相关文章

  1. Java获取一维数组的最小值

    编写程序,实现接受用户在文本框中输入的单行数据.这些数据都是整数数字,以空格进行分隔,空格数量不限.并将这些数据分割成一维数组,再从数组中提取最小值显示在界面中.思路是先对用户的输入进行验证,即先用t ...

  2. ruby pluck用法,可以快速从数据库获取 对象的 指定字段的集合数组

    可以快速从数据库获取 对象的 指定字段的集合数组 比如有一个users表,要等到user的id数组: select id from users where age > 20; 要实现在如上sql ...

  3. 在Map对象中获取属性,注意判断为空

    在Map对象中获取属性,注意判断为空 public static void main(String[] args) { Map map = new HashMap(); Integer i = (In ...

  4. 集合 数组 定义 转换 遍历 Arrays API MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  5. C# 基础知识系列- 3 集合数组

    简单的介绍一下集合,通俗来讲就是用来保管多个数据的方案.比如说我们是一个公司的仓库管理,公司有一堆货物需要管理,有同类的,有不同类的,总而言之就是很多.很乱.我们对照集合的概念对仓库进行管理的话,那么 ...

  6. java集合-数组ArrayList

    1.简介 ArrayList是java集合框架常用的集合类之一,底层是基于数组来实现容量大小动态变化的. 2.类图(JDK 1.8) 下图是ArrayList实现的接口和继承的类关系图: public ...

  7. java 各种数据类型判断为空

    一,基本数据类型 八种基本类型有默认值 http://www.runoob.com/java/java-basic-datatypes.html 二,String 对象 // 判断String为空 / ...

  8. Visual Studio 2017 - Windows应用程序打包成exe文件(2)- Advanced Installer 关于Newtonsoft.Json,LINQ to JSON的一个小demo mysql循环插入数据、生成随机数及CONCAT函数 .NET记录-获取外网IP以及判断该IP是属于网通还是电信 Guid的生成和数据修整(去除空格和小写字符)

    Visual Studio 2017 - Windows应用程序打包成exe文件(2)- Advanced Installer   Advanced Installer :Free for 30 da ...

  9. m_Orchestrate learning system---三十二、数据库字段判断为空时容易出现问题,如何从根本上解决这个问题

    m_Orchestrate learning system---三十二.数据库字段判断为空时容易出现问题,如何从根本上解决这个问题 一.总结 一句话总结:字段禁止为空,设置默认值0即可 禁止 空 默认 ...

随机推荐

  1. IIS 和 各个协议

    1,IIS是Internet information service是internet信息服务的简写,它支持三大服务器,WWW,FTP,SMTP(简单Mail传输协议): 2,NNTP(网络新闻传输协 ...

  2. error C3872: “0x3000”: 此字符不允许在标识符中使用

    主要是拷贝的程序问题,有错误的空字符. 0x3000是汉语的空格,也就是全角空格,相当于一个汉字,但你又看不见它. 你知道的,像逗号,有半角(,)和全角(,)之分的,其实空格也有. 0x3000是全角 ...

  3. 使用SLT工具从SAP导入数据到SAP HANA

    在配置完备的情况下,SLT工具的Replicate 工作是在SAP HANA Data Provisioning中完成的 1. Log on to the SAP HANA Studio 2. Cal ...

  4. ****K - Alien's Organ

    K - Alien's Organ Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%lld & %llu Sub ...

  5. SweetTips: 快意灵动的Android提示库!

    此文章是我在简书的文章,自行搬到博客园.简书地址:SweetTips: 快意灵动的Android提示库! 源码及所在DEMO已上传至GitHub:SweetTips,欢迎大家提Bug,喜欢的话记得St ...

  6. Remote小Demo

    Demo基于http://www.cnblogs.com/zhili/p/NETRemoting.html RemotingObj using System; using System.Collect ...

  7. SQLServer中的变量:局部变量,全局变量

    SQLServer中的全局变量   变量 Transact-SQL语言中有两种形式的变量,一种是用户自己定义的局部变量,另外一种是系统提供的全局变量.局部变量 局部变量是一个能够拥有特定数据类型的对象 ...

  8. python修炼6

    文件操作 注:不能把open语句放在try块里,因为当打开文件出现异常时,文件对象file_object无法执行close()方法. 1.打开文件 (相当于桌面的快捷方式)f=open(文件名,模式默 ...

  9. 对“针对接口编程,而不是针对实现编程”的理解

    今天在阅读<Head First设计模式>的时候,看到了这句话:"针对接口编程,而不是针对实现编程",第一次见到的时候,不太清楚作者想表达的意思,想着到后来看看实例就懂 ...

  10. AMD规范

    common.js主要语法就是 var math=require('math'); math.add(2,3); require()用于加载模块就行了. 二行math.add(2, 3),在第一行re ...