ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

2022-08-06 第三小组 陈迪 学习笔记

2022-08-06 22:34:54  阅读:158  来源: 互联网

标签:结点 遍历 06 08 接口 陈迪 二叉树 集合 节点


集合(最重要):

前提知识:数据结构——树

结点:是数据结构中的基础,构成复杂数据结构的基本组成单位

树:是n(n>=0)个结点的有限集;n=0,称为空树

在任意的非空树中:

1、有且仅有一个特定的称为根节点

2、当n>1时,其余节点可分为m个互不相交的有限集

定义树的时候:

1、根节点唯一

2、子树的个数没有限制,但一定互不相交

树的定义中,使用了递归方式

结点的度:

结点拥有子节点的数量

结点关系:

结点是父子关系、孩子结点,父结点

结点层次

树的深度:

树中的结点最大层数

二叉树:

n个结点的有限集合,如果·n=0,那就称为空二叉树。

二叉树特点:

1、每个节点最多只有2个子树,不存在度大于2的情况;

2、左子树和右子树有顺序且不能颠倒

3、即使树中某个节点只有一颗子树,也要区分是左子树和右子树。

二叉树的性质:

1、在二叉树中第i层最多有2^(i-1)个结点。

2、二叉树中,如果深度为k,那么最多有2^k-1个结点。

3、n0=n2+1.n0表示度数为0的节点,n2表示度数为二的节点

4、完全二叉树中,具有n个结点的完全二叉树的深度为[log2n]+1;

其中[log2n]是向下取整。

5、若对含有n个结点的完全二叉树从上到下且从左到右进行1——n的编号,则对完全二叉树中任意一个编号为i的节点有如下特性:

若i=1,则该节点是二叉树的根,无父结点,否则,编号为i/2的节点为父结点

若2i>n,则该结点无左孩子节点,否则,编号为2i的结点为左孩子节点

若2i+1>n,则该结点无右孩子结点,否则,编号为2i+1的结点为右孩子结点

斜树:

所有的节点都只有左子树的二叉树叫左斜树,只有右子树的二叉树叫右斜树

满二叉树:

在一棵二叉树中,如果所有的分支节点都存在左子树和右子树,则称为满二叉树

满二叉树特点:

1、叶子只能出现在下一层。

2、非叶子结点的度一定是2

3、在同样深度的二叉树中,满二叉树的结点个数最多,叶子树也最多

完全二叉树:

对一颗具有n个结点的二叉树,按层编号,如果编号为i(1<=i<=n)的结点与同样深度的满二叉树中i结点的位置相同,就称为完全二叉树。

二叉树的存取结构:

1、顺序存储

使用一堆数组存储二叉树中的结点,并且节点的储存位置,就是数组索引下标

当二叉树为完全二叉树时,节点刚好填满数组

如果不是完全二叉树,采用顺序存储,顺序存储结构中已经出现了结构浪费

顺序存储只适用于完全二叉树

2、二叉链表

二叉树每个节点都有两个孩子

可以将节点数据结构定义成一个数据和两个指针域

数据结点:

二叉树遍历:重点考察

二叉树的遍历从根节点出发,按照某种次数依次访问二叉树中所有节点每个节点仅被访问一次

访问次序分为四种:

递归遍历

自上而下,自左而右,每个节点走三次

前序遍历:

从根节点出发按照先左后右的方向访问

中序遍历:

从根节点出发,先向左再根后向右访问

后序遍历:先左后右再看根。

层次遍历:

按照树的层次自上而下遍历二叉树。

其他的树分类:

1、二叉查找树

若左子树不为空,左子树所有值小于根节点的值

若右子树不为空,右子树所有值大于根节点的值

左右子树也是一个二叉查找树

没有键值相等的点

2、平衡二叉树(AVL树)

2.1 含有相同结点的二叉树的不同形态,找出一个查找平均长度最小的一颗二叉查找树

2.2 要么是空树,要么根节点左右子树深度差值不超过1

2.3 左右子树都是平衡二叉树

2.4 二叉树结点的平衡因子定义为该结点左子树深度减去右子树深度

​ 平衡因子=左深—右深—101

3、红黑树

自平衡的二叉树,增加了颜色属性

3.1 只能是黑色或红色

3.2 红黑树中,所有叶子节点后面再装上左右两个空节点保持算法一致

3.3 根节点黑色,其他黑色或红色

3.4 在任意子树中,由上到下走到空节点的黑色节点数一样

4、B—树

是一种平衡多路查找树

(1).m阶B—树每个子节点至多m棵子树

(2).若根节点不是叶子节点,则至少有2棵子树

(3).除根节点外所有非终端节点至少有[m/2]棵子树

(4).每个节点的信息结构(A0、K1、A1、K2、······Kn、An),其中n表示关键字的个数,A是指针

所有叶子节点都出现在同一个层次,且不带任何信息。

5、B+树

B—树和B+树后续数据库阶段才会重点用。

集合框架(重要)

集合:容器,存放数据的一个容器

集合继承结构

Collection:存放单值的最大父接口

​ List(列表)线性表:和数组相似,List可以动态增长,查找元素效率高,插入删除效率低,因为会引起其他元素位置改变

​ Set也是线性表:检索元素效率低,删除插入效率高

Map<K,V>:存放对值的最大父接口

映射,用于保存具有映射关系的数据,Map保存的两组数据:key和value。key和value都可以是任意类型的引用数据类型,key不能重复

List:数据是有顺序(添加的先后顺序)的,数据可以重复

ArrayList:内部结构是数组。比较适合高效率的查找遍历

LinkedList:双向链表。比较适合高频率的新增删除

面试题:

1、Collection和Map的区别?

Collection存放单值,Map存放对值,都是最大父接口。

2、ArrayList和LinkedList的区别?

ArrayList:内部结构是数组。比较适合高效率的查找遍历。 LinkedList:双向链表。比较适合高频率的新增删除

3、ArrayList和Vector的区别?

几乎一摸一样,ArrayList线程异步,不安全;Vector线程同步,安全

Collection接口:

List:有顺序,元素可以重复,添加的先后顺序

Set:无顺序,元素不可以重复,添加的先后顺序

Set集合有顺序,内部算法排序,

Set集合如何确保数据的不重复。保证数据类型的类要重写hashCode·和equals方法。

TreeSet:

排序规则:要排序的对象的类必须实现Comparable接口

compareTo返回值代表int代表排序结果

负数-1,比较的两个值调用者小

0,两个值相等

1,比较的两个值调用者大

面试题:

List和Set的区别·?

List:有顺序,元素可以重复,Set:无顺序,元素不可以重复,

LinkedHashSet和·HashSet区别和联系:

比较接口:

Comparable接口:自然排序,规则固定

Comparator接口:临时排序

Map接口:

1、存储对值的K--V

2、key不能重复,value可以重复

3、没有顺序(添加的先后顺序)

HashMap内部储存结构:

1.7之后:链表+数组+红黑树

面试90%问原理

集合的遍历:

1、for循环

2、foreach语句

3、迭代器

Map集合的遍历

1、for循环:

2、增强for循环

3、增强for循环

Set<Map.Entry<String,String>> entries = map.entryest();

迭代中删除元素

推荐使用迭代器

其他的集合:

1、LinkedHashMap,在HashMap基础上维护了一个双向链表

面试题:线程安全问题

集合需要掌握:

1、如何创建需要的集合,多态

2、主要用到的List和Map

3、各种区别

4、各种集合API的调用

5、两个比较接口

6、各种集合特点,从接口层面到实现类层面

7、重点集合的内部结构

8、各种集合的遍历

9、并发问题

最重要的集合:

ArrayList、HashMap

积压的问题:

1、synchronize原理

2、ReentrantLock原理

3、ArrayList原理

4、LinkedList原理

5、HashMap原理

6、HashSet原理

心得体会

这两天学习了集合和树;学到的理论知识很多,要掌握的也很多,感觉后面的知识越来越难了,要加倍努力,跟上进度。

标签:结点,遍历,06,08,接口,陈迪,二叉树,集合,节点
来源: https://www.cnblogs.com/cd01106118/p/16558050.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有