数据结构之树,介绍篇

树的基本定义

  • 介绍:树(tree)是计算机中非常重要的数据结构,它的外形看起来像一颗倒挂着的的树,使用树这种结构可以描述生活中很多的事物,如族谱,单位的组织架构,xml,html的中属性的关系,文件目录,路由协议,某些数据库的索引,机器学习中的决策树等
  • 定义:树是由n(n>=1)个有限结点(node)组成的一个具有层次关系的集合,某些结点之前存在特定的关系,用连线相连,连线称作边(edge),边的上端的结点称为父结点,下面的端点称为子结点

树的特点

  1. 每个结点有0个或多个子结点
  2. 没有父结点的结点称为根结点
  3. 一个父结点可能有多个子结点
  4. 每个结点及其后代结点也可以看做一棵树,称为当前结点父结点的一颗子树

树的相关术语

  • 结点的度:一个结点含有的子树的棵数
  • 叶结点:度为0的结点称为叶结点,也叫做终端结点
  • 分支结点:度不为0的结点称为分支结点,或叫做非终端结点
  • 结点的层次:根结点层次为1,它的直接后继层次为2,以此类推
  • 结点的层序编号:将一棵树的结点按照从上往下,同层次从左往右的顺序,依次使用自然数按顺序编号获得的值
  • 树的度:树中所有结点最大的度,可能是根结点的度也可能不是(如某颗子树存在更多个颗树)
  • 树的高度或深度:树中结点的最大层次
  • 结点的深度:是指对应结点到根结点路径长度(经过的层次)
  • 森林:没有相互直接连接或间接连接关系的树的集合,可称之为森林。(将一棵树的根结点及其边移除得到所有其子树组成的集合,可称为森林)
  • 孩子(子)结点:一个结点的直接后继结点称之为该结点的孩子(子)结点
  • 双亲(父)结点:一个结点的直接前驱结点称之为该结点的双亲(父)结点
  • 兄弟结点:双亲结点相同的结点,互为兄弟结点
  • 子孙:以某节点为根的子树中任一节点都称为该节点的子孙。

树的常见/常用种类

  • 二叉树(Binary tree,区别于B-tree):每个节点最多含有两个子树的树称为二叉树;
  • 完全二叉树(Complete Binary tree):除了最后一层的结点树有可能没有达到饱和外,其他所有层都已经是饱和值,此外,其最后一层的结点会尽量从左往右生成;
  • 满二叉树(Full Binary tree):满二叉树是完全二叉树的一种特殊情况
  • 平衡二叉树(AVL tree,取名于其两个发明者 Adelson-Velsky和Landis):当且仅当任何节点的两棵子树的高度差不大于1的二叉树;
  • 二叉查找树(英语:Binary Search Tree,BST),是一种内存中特殊的数据结构,它允许对存储在其结点的数据进行增删改查,或者用作动态的数据集合,或是通过key查找对应value的查找表;
  • 霍夫曼树(用于信息编码):带权路径最短的二叉树称为哈夫曼树或最优二叉树;
  • B树:一种对读写操作进行优化的自平衡的二叉查找树,能够保持数据有序,拥有多余两个子树。

其中一部分我们会在后续详细介绍

二叉树的性质

  • 性质1: 在二叉树的第i层上至多有2^(i-1)个结点(i>0)
  • 性质2: 深度为k的二叉树至多有2^k - 1个结点(k>0)
  • 性质3: 对于任意一棵二叉树,如果其叶结点数为N0,而度数为2的结点总数为N2,则N0=N2+1;
  • 性质4:具有n个结点的完全二叉树的深度必为 log2(n+1)
  • 性质5:对完全二叉树,若从上至下、从左至右编号,则编号为i 的结点,其左孩子编号必为2i,其右孩子编号必为2i+1;其双亲的编号必为i/2(i=1 时为根,除外)

数据结构之树:树的介绍——9相关推荐

  1. 数据结构 树的基本介绍

    数据结构 树的基本介绍 树 树的定义及特点 树的逻辑结构表示方法 树的基本术语 树的性质 树的基本运算 树 树的定义及特点 树的定义: 树是由n(n>=0)个结点组成的有限集合(记为T).如果n ...

  2. DF学数据结构系列——B树(B-树和B+树)介绍

    B树 定义:一棵B树T是具有如下性质的有根树: 1)每个节点X有以下域: a)n[x],当前存储在X节点中的关键字数, b)n[x]个关键字本身,以非降序存放,因此key1[x]<=key2[x ...

  3. 数据结构 多路查找树 ---------B树和B+树的简单介绍

    参考链接:微信公众号 程序员小灰 https://mp.weixin.qq.com/s/rDCEFzoKHIjyHfI_bsz5Rw https://mp.weixin.qq.com/s/jRZMMO ...

  4. Java数据结构与算法——树(基本概念,很重要)

    声明:码字不易,转载请注明出处,欢迎文章下方讨论交流. 有网友私信我,期待我的下一篇数据结构.非常荣幸文章被认可,也非常感谢你们的监督. 前言:Java数据结构与算法专题会不定时更新,欢迎各位读者监督 ...

  5. 数据结构与算法:树 二叉树入门(一)

    Tips: 采用java语言,关注博主,底部附有完整代码 工具:IDEA 本系列介绍的是数据结构: 树 这是第1篇目前计划一共有12篇: 二叉树入门 本篇 顺序二叉树 线索化二叉树 堆排序 赫夫曼树( ...

  6. 【经典数据结构】B树与B+树的对比区别

    维基百科对B树的定义为"在计算机科学中,B树(B-tree)是一种树状数据结构,它能够存储数据.对其进行排序并允许以O(log n)的时间复杂度运行进行查找.顺序读取.插入和删除的数据结构. ...

  7. [数据结构] 常用的树型结构

    这篇文章写得不错原文链接: 数据结构中各种树 - xin Tech - 博客园 数据结构中各种树 阅读目录 1. 二叉树 2. 二叉查找树 3. 平衡二叉树 3.1 平衡查找树之AVL树 3.2 平衡 ...

  8. 【经典数据结构】B树与B+树(动图看转载)

    本文转载自:http://www.cnblogs.com/yangecnu/p/Introduce-B-Tree-and-B-Plus-Tree.html 维基百科对B树的定义为"在计算机科 ...

  9. MySql进阶索引篇01——深度讲解索引的数据结构:B+树

    深度讲解索引的数据结构:B+树 1.索引介绍 1.1 为什么使用索引 1.2 索引的优缺点 2.从零开始设计索引 2.1没有索引时怎么查询数据 2.2 基于页的目录项的简单索引 2.3 InnoDB索 ...

  10. 心中有“树”!图文并茂介绍数据结构中常见的树(二)

    计算机科学家尼古拉斯·沃斯(Niklaus Wirth)曾说过:编程=数据结构+算法 ,可见数据结构在编程中的重要性. 50 年过去了,计算机行业日新月异,大佬的这句名言是否还适用于当下?使用成熟且丰 ...

最新文章

  1. 《用于物联网的Arduino项目开发:实用案例解析》—— 3.4 小结
  2. python电脑安装-如何安装python
  3. [驱动注册]platform_driver_register()与platform_device_register()
  4. 使用 std::shared_ptr 和 std::unique_ptr 测试 boost/pointer_cast.hpp
  5. 阅读笔记五2017.2.13
  6. Nginx使用SSL配置HTTPS
  7. 双时隙的工作原理_双联开关的工作原理
  8. 5.07—018—周二
  9. python决策树原理_关于决策树算法最通俗的一次Python学习教程,你肯定得看
  10. ajax写删除程序,ajax处理程序删除标记
  11. android谷歌打印插件下载地址,ARC Welder(App Runtime for Chrome)插件下载 附下载地址
  12. 解决ADB启动问题(Failed to initialize Monitor Thread: Unable to establish loopback connection)
  13. windows下安装使用WGET
  14. 仓库管理软件中的账套是什么意思
  15. Python爬虫实战——反爬策略之代理IP【无忧代理】
  16. 《HarmonyOS开发 - 小凌派-RK2206开发笔记》第2章 源码编译与固件下载
  17. Remote使用出现的问题及解决办法
  18. 手把手教你如何在Innovus中解决local congestion问题
  19. 应用分发是什么意思?APP内测分发步骤
  20. wi-fi 频宽设置_为客人设置Wi-Fi的10种方法

热门文章

  1. Python 之 Python2 和 Python3 的区别
  2. tkinter中鼠标与键盘事件
  3. Day12-date time
  4. Java obj与JSON互转(jackson)
  5. insert mysql后加where,如何在MySQL Insert語句中添加where子句?
  6. 高光谱图像pca降维_高光谱图像的数据特性之探讨
  7. 鸿蒙还是不是安卓,华为捐赠鸿蒙核心架构!是否形成“三足鼎立”?
  8. c语言编程题目(一)
  9. 关于scanf和的问题
  10. 微信扫码下载iosAPP