035.二叉树的存储和定义


博主的 Github 地址


1. 数组, 链表, 树的存储方式分析

1.1. 数组存储方式的分析

  • 优点:
    通过下标方式访问元素, 速度快. 对于有序数组, 还可以用二分查找提高检索速度.

  • 缺点:
    如果要检索具体某个值, 或者插入值(按一定顺序)会整体移动, 效率较低

    • 在插入值的时候会发生数组扩容, 本质上是开辟新数组复制旧数组
    • 然后插入值的时候会将数组排序后再放入新数组, 效率较低
    • ArrayList 底层本质上其实也是数组扩容

1.2. 链式存储方式的分析

  • 优点:
    在一定程度上对数组存储方式有优化, 比如插入一个数值结点,
    只需要将插入结点连接到链表中即可, 删除效率也很好.

  • 缺点:
    在进行检索时, 效率仍然较低, 比如在检索某个值时, 需要从头结点开始遍历.


1.3. 树存储方式的分析(以二叉树为例)

能提高数据存储, 读取的效率, 比如利用二叉排序树(Binary Sort Tree),
即可以保证数据的检索速度, 也可以保证数据的插入删除修改速度.

1.3.1. 二叉排序树存储案例

将数组 [7,3,10,1,5,9,12] 用二叉排序树进行存储
二叉排序树

  • 需求 1: 查找元素 [12]

    • 先和 [7] 比较, 发现目标比 [7] 大, 向 [7] 右边寻找
    • 找到 [10], 发现目标依旧比 [10] 大, 继续向 [10] 右边寻找
    • 找到[12], 发现寻找目标, 经过两轮比较, 成功完成检索.
  • 需求 2: 添加元素 [13]

    • 先进行比较, 找到比 [13] 小的元素中最大的那一位
    • 找到 [12], 直接将 [13] 挂在 [12] 的右边结点即可
  • 需求 3: 删除元素[1]

    • 找到元素 [1], 并找到元素 [1] 的父结点 [3]
    • 直接将父结点 [3] 对 [1] 的指向引用去掉即可
1.3.2. 简单总结
  • 树的结构存储很方便, 同时解决了查找元素效率低的问题

2. 二叉树的原理

2.1. 树的常用术语

树示意图

树的常用术语

  • 结点
  • 根结点
  • 父结点
  • 子结点
  • 叶子结点(没有子结点的结点)
  • 结点的权(结点值)
  • 路径(从根结点找到目标结点的路线)
  • 子树
  • 树的高度(最大层数)
  • 森林(多少颗子树构成森林)

2.2. 二叉树的定义

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

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

二叉树1

  1. 如果该二叉树的所有叶子结点都在最后一层, 并且结点总数为 2n-1 (n 为层数), 则称该二叉树为满二叉树.

  2. 如果该二叉树的所有叶子结点都在最后一层或倒数第二层,
    且最后一层的叶子结点在左边连续, 倒数第二层的叶子结点在右边连续,
    则称该二叉树为完全二叉树

二叉树2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值