树、图相关基础概念以及算法

1.1 树的基本术语

  • 树:一对多的结构(1对0,1对1,1对多),有根节点
  • 结点:树的一个数据元素
  • 孩子:1对多里面的多
  • 子树:以某个孩子结点为根的一棵树
  • 叶子结点:没有孩子的结点
  • 森林:多颗树

1.2 二叉树

每个结点至多有两个孩子,分别称为左孩子和右孩子

  • 左孩子若有左子树的根
  • 右孩子若有是右子树的根
  • 高度(深度):最深的叶子结点所在的层数

二叉树重要性质

第 i 层至多有2的 i-1 次方个结点
高度为n的树至多有2的 n-1 个结点

两种特殊的二叉树

满二叉树: 高为n 有 2的n 次方 - 1个结点
完全二叉树: 只在二叉树的最下层的最右边有空缺

1.3 二叉树的顺序存储

二叉树以层序遍历的顺序存入数组中

  • 第i个结点的左右孩子分别是2i+1和2i+2 (i从0开始计数)
  • 结点为空时使用特殊值表示(0)

1.4 二叉树的链式实现

在结点中定义一个数据域,以及该结点的左子树、右子树。

1.5 二叉树的遍历

  • 先序遍历:先根节点->左子树->右子树
  • 中序遍历:左子树->当前结点->右子树
  • 后序遍历:左子树->右子树->当前结点
  • 层序遍历:逐层从左向右遍历各个结点

1.6 哈夫曼树和哈夫曼编码

  • 越靠近根节点的权值越大
  • 初始结点全是后来的叶子结点
  • 叶子节点权值越大,离根结点越近 => 路径越短
  • 最大程度的节省空间,越常用的字符码长越短

1.7 无向图和有向图

在一个无向图中,所有结点的度数之和为边数的2倍
在一个有向图中,所有顶点的出度之和等于所有顶点的入度和

  • 无向无权图:
    - 用1表示有边相连,0表示无边
    - 矩阵是对称的
  • 有向加权图:
    - Mij 表示点到点之间的距离(权值)
    - 如果不连通用 无穷符号代替
    - i = j 时表示为0

1.8 邻接表

  • 优点:在边少情况下节省许多空间, 适用于稀疏图
  • 缺点:无法直接获取某条边的信息,要在链表进行从头顺序存取,最坏情况O(n)

1.9 图的DFS和BFS

  • DFS 深度优先遍历: 选择一个结点作为初始结点,遇到新邻居就进栈,直到没有邻居了开始出栈。优先进入后来遇到的邻居(递归、栈实现)
  • BFS 广度优先遍历:先把当前结点的邻居都遍历完,再按先来后到遍历的方式遍历邻居的邻居们,逐层向外扩张。优先进入先访问的邻居的邻居 (队列)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李同学va

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值