数据结构简记✏️ | 二叉树&堆

二叉树(Binary Tree)

一、二叉树部分概念

  • 二叉树定义:具有 n n n个结点的有限集合,如图🌝
  • 根、左、右子树:对于二叉树

    25 25 25为根结点, 21 21 21为左子树(左结点), 79 79 79为右子树(右结点)。🌞
  • 满二叉树:深度为 k k k且结点个数为 2 k − 1 2^k-1 2k1的二叉树,如图
  • 完全二叉树

二、二叉树的部分性质

  • 非空二叉树的第 i i i层最多有 2 i − 1 2^{i-1} 2i1个结点( i ≥ 1 i\ge 1 i1)。
  • 深度为 k k k的二叉树最多有 2 k − 1 2^k-1 2k1个结点( k ≥ 1 k\ge 1 k1)。
  • 对任意二叉树,度为0的结点个数为 n 0 n_0 n0,度为2的结点个数为 n 2 n_2 n2,则有 n 0 = 2 n 2 + 1 n_0=2n_2+1 n0=2n2+1
  • 对具有 n n n个结点的完全二叉树的深度 k = ⌊ l o g 2 n ⌋ + 1 k=\lfloor log_2n\rfloor+1 k=log2n+1。🌛

三、二叉树的存储结构

  • 顺序结构类型定义:🐩
typedef char TElemType;
typedef struct {
	TElemType *elem;//存储空间基址,0号单元闲置
	int lastIndex;//二叉树最后一个结点的编号
}SqBiTree;//顺序结构的二叉树(适合完全二叉树)
  • 二叉链表类型定义
typedef struct BiTNode {
	TElemType data;//数据域
	struct BiTree *lchild,*rchild;//左右孩子指针域
}BiTNode,*BiTree;//二叉链表
  • 三叉链表类型定义:🌚
typedef struct TriTNode {
	TElemType data;
	struct TriTNode *parent,*lchild,*rchild;//双亲,左右孩子结点指针域 
}TriTNode,*TriTree;//三叉链表

堆(Heap)

一、堆部分概念

  • 堆定义:一类完全二叉树,常用于实现堆排序。🐊
  • 小顶堆:非叶子结点均不小于其左右孩子结点(没画出来…)。🌜
  • 大顶堆:非叶子结点均不小于其左右孩子结点,如图

二、堆的存储结构

  • 类型定义
typedef struct {
	RcdType *rcd;//堆基址,0号单元闲置
	int n;//堆长度
	int size;//堆容量
	int tag;//小顶堆和大顶堆的标志;tag=0为小顶堆,tag=1为大顶堆
	int (*prior)(KeyType,KeyType);//函数变量,用于关键字优先级比较
}Heap;//堆类型
  • 优先级比较函数定义:🐢
//大顶堆优先函数
int greatPrior(int x, int y) {
	return x>=y;
}
//小顶堆优先函数
int lessPrior(int x, int y) {
	return x<=y;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值