算法基础理论 - 数据结构和树

数据结构
  • 数据的关系,叫做结构
  • 线性结构 - 数据元素之间为一对一关系;
  • 线性结构 - 线性表
  • 顺序存储结构的线性表称为顺序表,链式存储的线性表称为链表
  • 顺序表是将数据按顺序保存到内存中,因此在顺序表中存取数据很方便,但同时也带来一些问题,例如,向顺序表中插入元素时,需要移动大量的数据,链表中每个节点都应包括两个部分:一部分是实际数据,另一部分是下一个节点的地址
  • 每个节点中只包含一个指针,一般称为单向链表。若每个节点包含两个指针,一个指向下一个节点,另一个指向上一个节点,称为双向链表
树形结构和网状结构
  • 树形结构:数据元素之间为一对多关系;
  • 网状结构:数据元素之间为多对多关系。
树的表示方法1 集合表示
// 前边表示元素集合,后边表示元素关系 
二元组:T = ({A,B,C,D,E,F,G,H,I },{<A,B> ,<A ,C>,<B,D>,<B,E>,<B,F>,<C,G>,<E,H>,<E,I>})
树的表示方法2 分支图

树的图片

树的表示方法2 长短柱形图

在这里插入图片描述

树的特点
  • 空集合也是树,叫空树
  • 单个节点也是树,树根就是节点本身
  • 在树中,只有根节点没有前驱,除了根节点,每个只有一个前驱
  • 父节点、子节点、兄弟节点
  • 节点的就是节点子节点的数量
  • 树的度,子节点中最大的度
  • 树中度为0的是叶节点和终端节点
  • 树中度不是0的叫做分支节点和非终端节点
  • 节点的层数,就是第几层,根节点第一层
  • 树的深度,就是最大层级
  • 有序树和无序树,子节点是否按照顺序从左往右排
森林

n颗互不相交的树的集合,对于树的某个节点,它的子树都是森林,

二叉树
  • 二叉树 最多有2个子节点的树
  • 树的节点没有左右之分,二叉树有左右节点之分 ,所以二叉树是有序树
二叉树性质
  1. 总节点数 = 度0数 + 度1数 + 度2数
  2. 总节点数 - 1 = 分支数
  3. 分支数 = 2 * 度2数 + 度1数
  4. 第n层的节点总数最多是 2 n-1
  5. 深度为n二叉树,当前层最多 2n - 1个, 总节点数最少n个节点, 最多是 (2 n-1个)
  6. 度为2的节点数是b,叶节点数 b+1个
满二叉树 深度为n
  • 在一棵二叉树中,如果所有分支结点都存在左子树和右子树,并且所有叶子结点都在同一层上,这样的一棵二叉树称为满二叉树。
  • 没有度1节点
  • 每层左边第一个编号是 2 n-1
  • 最大编号就总个数
  • 叶子数 = Math.ceil(总节点数 / 2)
完全二叉树
  • 叶子结点只能出现在最下层和次下层,且最下层的叶子结点在树的左部
  • 具有n个节点的完全二叉树的深度k为:k = [log2n]+1 (第k层第一个是 2 的k-1 次方 下一层是 2 的 k次方, n的大小在两者之间 )
  • 完全二叉树,从上到下,从左到右编号,一个节点号是 n , 左孩子是2n(如果有) ,右孩子是2n +1 (如果有),双亲编号 n/2
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值