数据结构与算法(十二)——树的基本介绍

数组,链表,树三种结构存储方式对比

数组

  1. 优点:通过下标方式访问元素,速度快,对于有序数组,还可以使用二分查找提高检索速度
  2. 如果要检索具体的某个值,或者插入值(按一定顺序),数组会整体移动,效率较低;并且如果数组已满需要进行扩容,消耗额外的时间
  3. ArrayList数组集合底层操作机制
  1. ArrayList中维护了一个Object类型的数组elementData
  2. 当创建对象时,如果使用的是无参构造器,则初始elementData容量为0(jdk7是10)
  3. 如果使用的是指定容量capacity的构造器,则储时为elementData容量为capacity
  4. 当添加元素时:先判断是否需要扩容,如果需要扩容则调用grow方法,否则直接添加元素到合适位置
    如果使用的是无参构造器,第一次添加需要扩容的话,则扩容elementData的length为10,如果需要再次扩容的话,则扩容为1.5倍
    如果使用的是指定capacity的构造器,需要扩容则直接扩容到1.5倍
    在这里插入图片描述

链表

  1. 优点:存储位置不是连续的,在一定程度上,对数组的存储方式进行了优化,比如,插入一个数值结点。只需要将插入位置的前一个结点的next指向该节点,然后将该节点的next指向下一个结点,删除效率也很好
  2. 缺点:在进行检索时,效率仍然很低,每次检索都要从头节点一直遍历到目标结点
    在这里插入图片描述

树结构可以提高数据存储,读取的效率;比如利用二叉排序树,即可以保证数据的检索速度,同时也可以保证树的插入,删除,修改的速度
在这里插入图片描述

在这里插入图片描述

常用术语

  1. 节点:又称节点对象,树中存储数据的结构体
  2. 根节点(root节点):树的最顶端的节点
  3. 父节点:某个节点的上一层节点称为该节点的父节点
  4. 子节点:某节点指向的下一层的节点称为该节点的子节点
  5. 叶子节点:没有子节点的节点
  6. 节点的权:节点的值
  7. 路径:从root节点找到该节点的路径
  8. 层:树的叶子节点到根节点相差的层面树,每跨父->子为一层
  9. 子树:某个节点下层看作一棵树,该树就是这个节点的子树
  10. 树的高度:树的最大层数
  11. 森林:多颗子树一起,构成一个森林

二叉树

  1. 树有很多种,每个节点最多只能有两个子节点的形式称为二叉树

  2. 二叉树的子节点分为左子节点和右子节点

  3. 如果该二叉树的所有叶子节点都在最后一层,并且节点总数为2n-1,n为层数,则称为满二叉树
    在这里插入图片描述

  4. 如果该二叉树的所有叶子节点都在最后一层或者倒数第二层,并且最后一层的叶子节点在左边连续 ,倒数第二层的叶子节点在右边连续,称为完全二叉树
    在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值