获取集合、数组后要判断为空的必要性以及根据构造器创建对象后不是null的证实
一、树 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的证实的更多相关文章
- Java获取一维数组的最小值
编写程序,实现接受用户在文本框中输入的单行数据.这些数据都是整数数字,以空格进行分隔,空格数量不限.并将这些数据分割成一维数组,再从数组中提取最小值显示在界面中.思路是先对用户的输入进行验证,即先用t ...
- ruby pluck用法,可以快速从数据库获取 对象的 指定字段的集合数组
可以快速从数据库获取 对象的 指定字段的集合数组 比如有一个users表,要等到user的id数组: select id from users where age > 20; 要实现在如上sql ...
- 在Map对象中获取属性,注意判断为空
在Map对象中获取属性,注意判断为空 public static void main(String[] args) { Map map = new HashMap(); Integer i = (In ...
- 集合 数组 定义 转换 遍历 Arrays API MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- C# 基础知识系列- 3 集合数组
简单的介绍一下集合,通俗来讲就是用来保管多个数据的方案.比如说我们是一个公司的仓库管理,公司有一堆货物需要管理,有同类的,有不同类的,总而言之就是很多.很乱.我们对照集合的概念对仓库进行管理的话,那么 ...
- java集合-数组ArrayList
1.简介 ArrayList是java集合框架常用的集合类之一,底层是基于数组来实现容量大小动态变化的. 2.类图(JDK 1.8) 下图是ArrayList实现的接口和继承的类关系图: public ...
- java 各种数据类型判断为空
一,基本数据类型 八种基本类型有默认值 http://www.runoob.com/java/java-basic-datatypes.html 二,String 对象 // 判断String为空 / ...
- 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 ...
- m_Orchestrate learning system---三十二、数据库字段判断为空时容易出现问题,如何从根本上解决这个问题
m_Orchestrate learning system---三十二.数据库字段判断为空时容易出现问题,如何从根本上解决这个问题 一.总结 一句话总结:字段禁止为空,设置默认值0即可 禁止 空 默认 ...
随机推荐
- 史上最详细SharePoint 2013安装步骤图解新手教程
来源:// http://www.itexamprep.com/cn/microsoft/soft/sharepoint2013/2013/0408/2866.html 文章就是SharePoint2 ...
- 设计模式-GoF23
书呢,是2012年双11买的. 没有面向对象程序经验的人,果然还是看不懂的.
- mysql5.5修改字符编码
因为mysql版本问题,网上各种修改编码的方法都不行,最后找到下面这条,终于解决! [mysqld]下添加: character-set-server=utf8 collation-server=ut ...
- 一.HttpClient、JsonPath、JsonObject运用
HttpClient详细应用请参考官方api文档:http://hc.apache.org/httpcomponents-client-4.5.x/httpclient/apidocs/index.h ...
- UNICODE与ANSI的区别
什么是ANSI,什么又是UNICODE呢?其实这是两种不同的编码方式标准,ANSI中的字符采用8bit,而UNICODE中的字符采用16bit.(对于字符来说ANSI以单字节存放英文字符,以双字节存放 ...
- ubuntu14.04 下安装mysql5.6
1.sudo apt-get install mysql-server-5.6 2.测试是否安装成功 ps aux |grep mysql mysql -u root -p 3.允许远程访问设置 su ...
- android源码查看所有分支切换分支
cd .repo/manifests git branch -a repo init -b android-4.1.2_r1 repo sync
- LeetCode 之 Triangle
Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjacent n ...
- 修改MANIFEST.MF方法
步骤: 1.用winrar等其他解压工具,右键选择"用winrar打开": 2.找到MANIFEST.MF文件,鼠标左键拖拽到桌面: 3.最后一行加入Main-Class:(空格) ...
- 关于安装第三方模块和PILLOW
看廖雪峰老师这一节的教程卡在这里挺久了 在谷歌上了搜了很久,最后根据这个教程上解决了这个问题 http://www.yihaomen.com/article/python/566.htm 觉得自己好蠢 ...