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

树与二叉树(数据结构)

(1)树的基本性质

  • 1.树中的结点数等于所有结点的度数+1。
  • 2.树中结点的最大度数称为树的度。
  • 3.度为m的树中第i层上至多有mi-1个结点。
  • 4.高度为h的m叉树至多有(mh-1)/(m-1)个结点。
  • 5.具有n个结点的m叉树的最小高度math.ceil(logm[n(m-1)+1])

(2)二叉树的基本性质

  1. 二叉树是有序树,次序不能颠倒。
  2. 二叉树可以为空,但度为2的树至少有3个结点。
  3. 满二叉树:高度h,结点总数为2h-1。【最完美的二叉树】
  4. 完全二叉树:仅次于满二叉树之后完美的二叉树。【有一些完美的性质】
  5. 二叉树排序树:左子树小于根节点,右子树大于根节点。左子树和右子树又各是一颗二叉排序树。
  6. 平衡二叉树:树上任一结点的左子树和右子树的深度之差不超过1.【最苛刻的二叉树】

二叉树的一些完美性质:

  • 1.叶子结点树等于度为2的结点数+1。即N0=N2+1.
  • 2.非空二叉树上第K层最多有2k-1个结点。(满二叉树)
  • 3.高度为H的二叉树最多有2H-1个结点。【完美二叉树、满二叉树】
  • 4.对完全二叉树从1到N标号时:
    1. i>1时,它的双亲结点编号为math.floor(i/2).
    2. 2i<=N时,结点i的左孩子编号为2i,否则无左孩子。2i+1<=N时,结点i的右孩子为2i+1.否则无右孩子。
    3. 结点i所在的深度为math.floor(log2i)+1
  • 5.具有N个结点的完全二叉树的高度为:math.floor(log2N)+1或math.ceil(log2N+1)

树与二叉树的应用:(重要)

  1. 二叉排序树(二叉查找树BST)
    • 二叉排序树的中序遍历是递增有序的序列。(不然怎么叫排序树呢)
    • 二叉排序树的查找:先与根节点比较,之后左子树,右子树。
    • 二叉排序树的插入:插入的新节点一定是某个叶节点。
    • 二叉排序树的删除:
      • ①若删除结点是叶子结点,则直接删除,不会破坏二叉树的性质。
      • ②若删除结点只有一棵左子树或右子树,让其子树代替其原来位置即可。
      • ③既有左子树又有右子树的情况,在右子树上找中序第一个子女填补。

    查找算法的平均查找长度,主要取决于树的高度--->最坏情况下O(n)(n代单传) 

  2.平衡二叉树

    • 为了避免树的高度增长过快,降低二叉排序树的性能,规定在插入和删除二叉树结点时,要保证任意节点的左右子树的高度差不超过1,称为平衡二叉树,简称平衡树。
    •     

  3.哈夫曼树和哈夫曼编码

转载于:https://www.cnblogs.com/xubing-613/p/7472636.html

相关文章:

  • DB2 alter表字段
  • 各种方法配置 Visual Studio 第三方库
  • BZOJ2303: [Apio2011]方格染色
  • WINFORM TableLayout控件双缓冲防止闪烁
  • Session详解
  • javaAPI1
  • 77 最长公共子序列 (lintcode)
  • struts spring hibernate 三大框架实现基本的增删改查技术
  • 写代码的一些常识
  • warning: assignment from incompatible pointer type [enabled by default]
  • 剑指offer 数字在排序数组中出现的次数
  • 打造vim IDE
  • linux挂载远程windows服务器上的ISO,给内网的服务器安装软件
  • 开源的API集成测试工具 v0.1.2 - 增强体验
  • ActiveMQ笔记——技术点汇总
  • [数据结构]链表的实现在PHP中
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • 【RocksDB】TransactionDB源码分析
  • 【剑指offer】让抽象问题具体化
  • 【跃迁之路】【699天】程序员高效学习方法论探索系列(实验阶段456-2019.1.19)...
  • CentOS 7 修改主机名
  • java8-模拟hadoop
  • java多线程
  • js对象的深浅拷贝
  • react-native 安卓真机环境搭建
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • 基于遗传算法的优化问题求解
  • 聊聊hikari连接池的leakDetectionThreshold
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 深入浅出webpack学习(1)--核心概念
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • linux 淘宝开源监控工具tsar
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • 国内开源镜像站点
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • # MySQL server 层和存储引擎层是怎么交互数据的?
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (C语言)二分查找 超详细
  • (Python) SOAP Web Service (HTTP POST)
  • (分布式缓存)Redis持久化
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (排序详解之 堆排序)
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (转) ns2/nam与nam实现相关的文件
  • ***详解账号泄露:全球约1亿用户已泄露
  • .form文件_SSM框架文件上传篇
  • .net 8 发布了,试下微软最近强推的MAUI
  • .net core Swagger 过滤部分Api
  • .NET 中各种混淆(Obfuscation)的含义、原理、实际效果和不同级别的差异(使用 SmartAssembly)