树形结构

大自然中的树:

一. 树的概念及特点

树的概念

树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合;

树的特点

  • 有一个特殊的结点,该结点称为根结点,它没有前驱结点;
  • 除根结点外,其余结点被分成M(M > 0)个互不相交的集合T1、T2、…、Tm,其中每一个集合 Ti (1 <= i <= m) 又是一棵与树类似的子树。每棵子树的根结点有且只有一个前驱,但可以有0个或多个后继;
  • 树是递归定义的

注意

树形结构中,子树之间不能有交集,否则就不是树形结构;

举例

类似于上图1、图2、图3这种情况,均不能称为树形结构;原因:子树之间都存在交集.

** 二. 树的其他相关概念(很重要)**

  • 结点的度:一个结点含有子树的个数称为该结点的度;如上图:A的度为6

  • 树的度:一棵树中,所有结点度的最大值称为树的度;如上图:树的度为6

  • 叶子结点或终端结点:度为0的结点称为叶子结点; 如上图:B、E、G、L…等节点均为叶子结点

  • 双亲结点或父结点:若一个结点含有子结点,则这个结点称为其子结点的父结点; 如上图:A是B的父结点;

  • 孩子结点或子结点:一个结点含有的子树的根结点称为该结点的子结点;如上图:B是A的孩子结点

  • 根结点:一棵树中,没有双亲结点的结点;如上图:A

  • 结点的层次:从根开始定义起,根为第1层,根的子结点为第2层,以此往后类推

  • 树的高度或深度:树中结点的最大层次; 如上图:树的高度为4

  • 非终端结点或分支结点:度不为0的结点; 如上图:C、D、F、H等节点为分支结点

  • 兄弟结点:具有相同父结点的结点互称为兄弟结点; 如上图:H、I是兄弟结点

  • 结点的祖先:从根到该结点所经分支上的所有结点;如上图:A是所有结点的祖先

  • 子孙:以某结点为根的子树中任一结点都称为该结点的子孙。如上图:所有结点都是A的子孙

  • 森林:由m(m>=0)棵互不相交的树组成的集合称为森林

三. 树的常见表示形式

常见的四种表示法
双亲表示法,孩子表示法、孩子双亲表示法、孩子兄弟表示法;

双亲表示法

(1)结点中包含自己的值域;
(2)结点中包含双亲的引用

优点:可以快速找到结点双亲的位置;
缺点:无法知道所对应孩子的位置;

孩子表示法
(1) 结点中包含自己的值域;
(2) 包含其孩子结点的引用;

优点:可以快速找到结点孩子的位置;
缺点:无法找到该结点双亲的位置;

孩子双亲表示法:

结合双亲以及孩子表示法,既可以找到双亲还可以找到孩子的位置

孩子兄弟表示法:
(1) 包含自己的值域;
(2) 包含兄弟结点和孩子结点的引用;

优点:可以快速找到结点孩子以及兄弟的位置;
缺点:无法找到该结点双亲的位置;

举例
如下图所示


该图的双亲表示法:

上图的孩子表示法:

上述四种表示方式各有优缺点,使用时还要结合自己的情况来选择;

四. 树的应用(了解)

类似于我们常用的 windows 版本下的文件系统管理;

树形结构来了(了解)相关推荐

  1. 树形结构在关系数据库中的设计

    在程序设计中,经常以树形结构表示数据的层次关系,如菜单的结构.商品的分类等. 这样的层次结构在关系数据库中难以直观地表示.常见的一种做法是用一个字段指向上级节点来表示记录的上下级关系. fid pid ...

  2. html树状结构怎么展开,纯css实现树形结构

    纯css实现属性结构 **css实现属性结构的思路是利用伪类实现树形结构连接线,如果想实现点击展开和收 缩以及复选框效果还得配合js来实现.其实展开和收缩就是一个点击元素其子元素隐藏 和显示的切换.* ...

  3. 使用树形结构保存实体

    阅读原文请访问我的博客BrightLoong's Blog 之前在项目需要实现一个功能--将xml文件映射成实体,然后对映射的实体进行逻辑处理,最后保存到数据库中:由于xml结构的数据是结构化的数据, ...

  4. 在winform中从外部拖动节点到树形结构(treeview和listview相互拖动)(一)

    最近一个项目要用到从listview向treeview拖动item,达到从外部拖动图标成为树形结构的一部分,通过查阅资料总结了一些实现方式,分享给大家.这是winform中的例子. 在进行拖放操作之前 ...

  5. Java8 Stream流递归,几行代码搞定遍历树形结构

    欢迎关注方志朋的博客,回复"666"获面试宝典 可能平常会遇到一些需求,比如构建菜单,构建树形结构,数据库一般就使用父id来表示,为了降低数据库的查询压力,我们可以使用Java8中 ...

  6. 浅谈树形结构的特性和应用(上):多叉树,红黑树,堆,Trie树,B树,B+树......

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 上篇文章我们主要介绍了线性数据结构,本篇233酱带大家看看 无所不 ...

  7. 使用ztree.js,受益一生,十分钟学会使用tree树形结构插件

    看到ztree.js,这几个字眼,毋庸置疑,那肯定就是tree树形结构了,曾经的swing年代有jtree,后来jquery年代有jstree和treeview,虽然我没写过,但是我见过,一些小功能做 ...

  8. vue树形结构html,怎么在vue中利用递归组件实现一个树形控件

    怎么在vue中利用递归组件实现一个树形控件 发布时间:2021-06-11 17:26:48 来源:亿速云 阅读:81 作者:Leah 本篇文章为大家展示了怎么在vue中利用递归组件实现一个树形控件, ...

  9. 使用hibernate实现树形结构无限级分类

    转自 http://together.javaeye.com/blog/29482?page=2 在系统中,经常会用到无限级的树形结构分类,如组织机构管理.商品/地区分类等等.在以前的一个贴子:htt ...

  10. vue 递归组件多级_Vue递归组件实现树形结构菜单

    Tree 组件是递归类组件的典型代表,它常用于文件夹.组织架构.生物分类.国家地区等等,世间万物的大多数结构都是树形结构.使用树控件可以完整展现其中的层级关系,并具有展开收起选择等交互功能. 如图所示 ...

最新文章

  1. C++ 基础知识总结
  2. Serverless 在大厂都怎么用?
  3. mysql子查询复杂操作_MySQL 子查询操作
  4. 阿里张磊:如何构建以应用为中心的“Kubernetes”?(内含 QA 整理)
  5. 万字干货:教新手从0到1搭建完整的增长数据体系(30图)
  6. 前端那些年----Webstream快捷键备忘(mac)
  7. linux命令行安装libxml,Ubuntu 14.04下libxml2的安装和使用
  8. 2.6.29的一个节省内存的补丁
  9. 关于 google 的 Percolator
  10. 怎样安装计算机病毒,台式机电脑中病毒如何重装系统图文教程
  11. 差分进化算法DE优化BPNN
  12. 剪辑神器,分享一个可以批量修改大量视频MD5值的工具
  13. Github年度最强Python库排行榜出炉
  14. python画汤姆猫_python汤姆猫小游戏源代码免费下载
  15. PointNet++: Deep Hierarchical Feature Learning on Point Sets in a Metric Space翻译
  16. Spark程序使用Scala进行单元测试
  17. 三代基因组测序技术原理简介
  18. P6111 [USACO18JAN]MooTube S
  19. 指针变量的星号是靠近变量名还是靠近类型
  20. 百度灵医智惠明星案例获人民日报点赞:智慧医疗让看病更便捷

热门文章

  1. 《谁说菜鸟不会数据分析 入门篇》学习笔记
  2. Nginx遇到无法创建或打开nginx.pid的解决方法
  3. python中的ascii码是啥_python ascii码到u
  4. React Native 二 常用组件与开源组件
  5. vue-cli实现多页面多路由
  6. 提高下载微软产品的速度(改host)
  7. SpringBoot+Layui 打印PDF
  8. 一维条形码识别的整个过程原理通俗易懂讲解
  9. grasp设计模式应用场景_设计模式 GRASP GoF
  10. 小程序改变swiper样式(带缩略图)