js 数组 实现 完全树_【java】数组和二叉树

本文详细介绍了数组和二叉树的基本概念、定义方式及操作方法。数组是一组连续存储的相同类型元素集合,支持快速访问但插入删除操作较慢。二叉树是一种树形数据结构,每个节点最多有两个子节点,支持高效的查找、插入和删除操作。

c0f49e8ffa3de738f9c57be1e41aac40.gif

数组

数组分为一维数组和二维数组

数组的语法:

数据类型[] 数组名= new 数据类型[数组长度];

数组类型 数组名[] = new 数组类型[数组长度];

b6ca95ef3f2686fdc4a3dc199a87830a.png

数组元素的表示与赋值:

由于定义数组时,内存分配的是连续空间,所以数组元素在数组里顺序排列编号,该编号即元素下标,它标明了元素在数组中的位置

语法:

数组名[下标值]

数组的初始化

定义,就是在定义数组的同时一并完成赋值操作

语法:

数据类型[] 数组名 ={值1,值2,值3.....值n};

数组类型[] 数组名 = new  数据类型[]{值1,值2,值3,......,值n}

二维数组

定义和操作多维数组的语法与一维数组类似

语法:

数组类型 [] [] 数组名

数组类型 数组 [] []

** Java支持多维数组,但从内存分配原理的角度讲,Java中只有一维数组,没有多维数组

****总结:

数组是可以在内存中连续存储多个元素的结构,数组中的所有元素必须属于相同的数据类型

数组中的元素通过数组下标进行访问,数组下标从0开始

二维数组实际上是一个一维数组,它的每个元素又是一个一维数组

使用Array类提供的方法可以方便地对数组中的元素进行排序,查询等操作

二叉树

二叉树是每个节点最多有两个子树的树结构,通常子树被称作"左子树"和"右子树",左子树和右子树同时也是二叉树,二叉树的子树有左右之分,并且次序不能任意颠倒.二叉树是递归定义的,

特殊二叉树:

斜树:

所有的结点都只有左子树(左斜树),或者只有右子树(右斜树)

满二叉树:

所有的分支结点都存在左子树和右子树,并且所有的叶子结点都在同一层上,这样就是满二叉树.就是完美圆满的意思,关键在于树的平衡.

特点为:

叶子只能出现在最下一层

非叶子节点度一定是

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

完全二叉树:

对一颗具有n个结点的二叉树按层序排号,如果编号为i的结点与同样深度的满二叉树编号为i结点在二叉树中位置完全相同,就是完全二叉树,满二叉树必须是完全二叉树,反过来不一定成立

特点:

叶子结点只能出现在最下一层(满二叉树继承而来)

最下层叶子结点一定集中在左部连续位置

倒数第二层,如有叶子结点,一定出现在右部连续位置

同样结点树的二叉树,完全二叉树的深度最小(满二叉树也是对的)

二叉树的遍历:

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

前序遍历:

886af7f1f606b2fac6e7cf7045bc309d.png

基本思想: 先访问根结点,再先序遍历左子树,最后再先序遍历右子树即根一左一右

中序遍历:

1d49b77b4b8db8cac3583081468f9d7c.png

基本思想: 先中序遍历左子树,然后再访问根结点,最后再中序遍历右子树即左一根一右

后序遍历:

2c46f95945025b6f35c17d4c09681959.png

基本思想: 先后序遍历左子树,然后再后序遍历右子树,最后再访问根结点即左一右一根

二叉树的作用:

二叉排序树是一种比较有用的折衷方案

数组的搜索比较方便,可以直接用下标,但删除或者插入某些元素就比较麻烦

链表与之相反,删除和插入元素很快,但查找很慢

二叉排序树就既有链表的好处,也有数组的好处

在处理大批量的动态的数据是比较有用

用的最多的应该是平衡二叉树,有种特殊的平衡二叉树红黑树,查找,插入,删除的时间复杂度最坏为O(log n)

平衡二叉树/红黑树就是为了将查找的时间复杂度保证在O(logN)范围内

二叉树之所以重要,是因为它支持或拥有的操作,包括增删改查重要的操作,复杂度比完成同样功能的其他结构更低

—END—

IT技术大神 ∣小白到大神的进阶之路

3bb5dfe909bebe4a2246a7c13cbdf223.png

长按识别二维码,加关注

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值