当前位置: 首页 > news >正文

【数据结构】二叉树的性质和存储结构

性质

  1. 在二叉树的第i层上至多有2^{i-1}个结点,至少有1个结点

  2. 深度为k的二叉树至多有2^{k-1}个结点(k≥1),至少有k个结点

  3. 对任何一棵二叉树T,如果其叶子数为n0,度为2的结点数为n2,则n0=n2+1

  4. 具有n个结点的完全二叉树的深度为log_2n+1(向下取整)

  5. 如果对一棵有n个结点的完全二叉树的结点按层序编号(从第一层到第log_2n+1层,每层从左到右),则对任一结点i,有:

(1)如果i=1,则结点i是二叉树的根,无双亲;如果i>1,则其双亲是结点i/2(向下取整)

(2)如果2i>n,则结点i无左孩子(结点i为叶子结点),否则其左孩子是结点2i

(3)如果2i+1>n,则结点i无右孩子;否则其右孩子是结点2i+1

存储结构

顺序存储

实现:按满二叉树的结点层次编号,依次存放二叉树的数据元素

#define MAXSIZE 100
Typedef TElemType SqBiTree[MAXSIZE]
SqBiTree bt;

顺序存储的缺点:浪费空间

最坏情况:深度为k的且只有k个节点的单支树需要长度为2^k-1的一维数组

适合于满二叉树和完全二叉树

链式存储

二叉链表:一个数据域和两个指针域,指向左右孩子

typedef struct BiNode{TElemTYpe data;struct BiNode *lchild,*rchild;//左右孩子指针
}BiNode, *BiTree;

在n个结点的二叉链表中,有n+1个空指针域

n个结点共有2n个指针域,除根结点外,每个结点有且仅有一个双亲,所以有n-1个结点的指针域存放指向孩子的指针,剩余n+1个指针为空指针

三叉链表:增加一个指针域指向双亲

typedef struct TriNode{TElemTYpe data;struct TriNode *lchild,*rchild,*parent;//左右孩子指针和双亲指针
}TriNode, *TriTree;

http://www.lryc.cn/news/502040.html

相关文章:

  • gbase8s之查看锁表的sql
  • URI 未注册(设置 语言和框架 架构和 DTD)
  • Ubuntu上使用system()函数运行不需要输入密码
  • 【MySQL】数据库必备知识:全面整合表的约束与深度解析
  • Windows下Docker快速安装使用教程
  • PTA DS 6-2 另类堆栈 (C补全函数)
  • rk3568之mpp开发笔记mpp移植到开发板
  • Vue解决跨域问题
  • Kubernetes Nginx-Ingress | 禁用HSTS/禁止重定向到https
  • TortoiseGit的下载、安装和配置
  • 如何绕过IP禁令
  • Vue3的provide和inject实现多级传递的原理
  • 使用html2canvas实现前端截图
  • 使用 Python 爬取某网站简历模板(bs4/lxml+协程)
  • 深度学习模型中音频流式处理
  • C语言(字符数组和字符指针)
  • SkyWalking Helm Chart 4.7.0 安装、配置
  • 微搭低代码AI组件单词消消乐从0到1实践
  • 23种设计模式之中介者模式
  • 【Golang】Go语言编程思想(六):Channel,第六节,并发编程模式
  • unity打包web,如何减小文件体积,特别是 Build.wasm.gz
  • go引入skywalking
  • 大华DSS数字监控系统 attachment_downloadAtt.action 任意文件下载漏洞复现
  • qt 封装 调用 dll
  • Python使用Selenium库获取 网页节点元素、名称、内容的方法
  • 系统安全——访问控制访问控制
  • SQL Server 数据库还原到某个时点(完整恢复模式)
  • 埃隆马斯克X-AI发布Grok-2大模型,快来体验~
  • Python工厂设计模式:简化对象创建
  • 【隐私计算篇】隐私集合求交(PSI)原理深入浅出