【啊哈!算法】算法9:开启“树”之旅  http://ahalei.blog.51cto.com/4767671/1403823

我们先来看一个例子。
这是什么?是一个图?不对,确切的说这是一棵树。这哪里像树呢?不要着急我们来变换一下。
是不是很像一棵倒挂的树,也就是说它是根朝上,而叶子朝下的。不像?哈哈,看完下面这幅图你就会觉得像啦。
你可能会问:树和图有什么区别?这个称之为树的东西貌似和无向图差不多嘛。不要着急,继续往下看。树其实就是不包含回路的连通无向图。你可能还是无法理解这其中的差异,举个例子,如下。
        
上面这个例子中左边的是一棵树,而右边的是一个图。因为左边的没有回路,而右边的存在1->2->5->3->1这样的回路。
       1、正是因为树有着“不包含回路”这个特点,所以树就被赋予了很多特性。
       2、一棵树中的任意两个结点有且仅有唯一的一条路径连通。
       3、一棵树如果有n个结点,那么它一定恰好有n-1条边。
在一棵树中加一条边将会构成一个回路。树这个特殊的数据结构在哪里会用到呢?比如足球世界杯的晋级图,家族的族谱图、公司的组织结构图、书的目录、我们用的操作系统Windows、Liunx或者Mac中的“目录(文件夹)”都是一棵树。下面就是“啊哈C”这个软件的目录结构。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
C:\啊哈C
├─codes
├─core
│ ├─bin
│ ├─include
│ │ ├─ddk
│ │ ├─gdb
│ │ ├─gdiplus
│ │ ├─GL
│ │ └─sys
│ ├─lib
│ │ └─gcc
│ │ └─mingw32
│ │ └─4.7.1
│ │ ├─finclude
│ │ ├─include
│ │ │ └─ssp
│ │ ├─include-fixed
│ │ └─install-tools
│ │ └─include
│ ├─libexec
│ │ └─gcc
│ │ └─mingw32
│ │ └─4.7.1
│ │ └─install-tools
│ └─mingw32
│ ├─bin
│ └─lib
│ └─ldscripts
└─skin

假如现在正处于libexec文件夹下,需要到gdiplus文件夹下。你必须先“向上”回到上层文件夹core,再进入include文件夹,最后才能进入gdiplus文件夹。因为一棵树中的任意两个结点(这里就是文件夹)有且仅有唯一的一条路径连通。

为了之后讲解的方便,我们这里对树进行一些定义。
       首先,树是指任意两个结点间有且只有一条路径的无向图。 或者说,只要是没有回路的连通无向图就是树。
喜欢思考的同学可能会发现同一棵树可以有多种形态,比如下面这个两棵树。
        
为了确定一棵树的形态,在一棵树中可以指定一个特殊的结点——根。我们在对一棵树进行讨论的时候,将树中的每个点称为结点,有的书中也称为节点。有一个根的树叫做有根树(哎,这不是废话嘛)。比如上方左边这棵树的树根是1号结点,右边这棵树的树根是3号结点。
根又叫做根结点,一棵树有且只有一个根结点。根结点有时候也称为祖先。既然有祖先,理所当然就有父亲和儿子。比如上图右边这棵树中3号结点是1、6和7号结点的父亲,1、6和7号结点是3号结点的儿子。同时1号结点又是2号结点的父亲,2号结点是1号结点的儿子,2号结点与4、5号结点关系也显而易见了。
父亲结点简称为父结点,儿子结点简称为子结点。2号结点既是父结点也是子结点,它是1号结点的子结点,同时也是4和5号结点的父结点。另外如果一个结点没有子结点(即没有儿子)那么这个结点称为叶结点,例如4、5、6和7号结点都是叶结点。没有父结点(即没有父亲)的结点称为根结点(祖先)。如果一个结点既不是根结点也不是叶结点则称为内部结点。最后每个结点还有深度,比如5号结点的深度是4。哎,终于啰嗦完了,写的我汗都流出来了,没有理解的请看下面这幅插图吧。

说了这么多你可能都没有感受到树究竟有什么好处。不要着急,请看下回——二叉树。

转载于:https://www.cnblogs.com/dailinfu/p/7416545.html

啊哈--算法 开启树之旅相关推荐

  1. 【啊哈!算法】算法5开启“树”之旅

    我们先来看一个例子.   这是什么?是一个图?不对,确切的说这是一棵树.这哪里像树呢?不要着急我们来变换一下.   是不是很像一棵倒挂的树,也就是说它是根朝上,而叶子朝下的.不像?哈哈,看完下面这幅图 ...

  2. 使用Scikit-learn开启机器学习之旅

    1. 机器学习基础 机器学习是令计算机根据可用数据执行相应策略而无需以明确的编程方式执行策略的一门学科. 在过去几十年间,由于可用数据的数量和质量呈指数级增长,同时高性能的计算设备也得到了快速发展,机 ...

  3. 学习成长就到鸿蒙思维,庆国庆,迎中秋,鸿蒙教育享双节99元开启思维之旅!!...

    原标题:庆国庆,迎中秋,鸿蒙教育享双节99元开启思维之旅!! 庆国庆,迎中秋,鸿蒙教育享双节99元开启思维之旅!! 鸿蒙口才+绘画课推出99元体验课程!学1科️1节课程不过瘾,️ 学2科️ ️4节课怎 ...

  4. 数据结构与算法——AVL树类的C++实现

    关于AVL树的简单介绍能够參考: 数据结构与算法--AVL树简单介绍 关于二叉搜索树(也称为二叉查找树)能够參考:数据结构与算法--二叉查找树类的C++实现 AVL-tree是一个"加上了额 ...

  5. 案例册下载 | 10+ 行业标杆企业实践集锦,为你开启数据驱动之旅

    2019 年,不同于以往停留在概念.趋势.浅层应用等阶段,大数据已经显著引领行业变革. 总体来看,国家大数据产业政策日趋成熟,从国家层面到各行各业,大数据价值均已经得到广泛关注,进入落地实施阶段.从新 ...

  6. Android零基础入门第7节:搞定Android模拟器,开启甜蜜之旅

    原文:Android零基础入门第7节:搞定Android模拟器,开启甜蜜之旅 在前几期中总结分享了Android的前世今生.Android 系统架构和应用组件那些事.带你一起来聊一聊Android开发 ...

  7. 数据结构与算法--B树原理及实现

    B树 前几篇文中讨论的数据结构我们都是假设所有的数据都存储在计算机的主存中.可说总要那么海量的数据需要通过个中数据结构去存储,我们不可能有这么多内存区存放这些数据.那么意味着我们需要将他们放磁盘.所以 ...

  8. [算法模板]树状数组

    [算法模板]树状数组 思路 图片转自:yhf_2015--彻底理解树状数组 使用这个图片就能很快的理解树状数组. 我们可以先根据图片来分解一个十进制数成二次幂. example: \(15=2^0+1 ...

  9. 算法开启栈转队列武魂

    文章目录 ==**栈接口见 [算法开启小码农栈血脉](https://blog.csdn.net/diandengren/article/details/121055584?spm=1001.2014 ...

最新文章

  1. antiSMASH数据库:微生物次生代谢物合成基因组簇查询和预测
  2. HALCON打开之后相机无法被别的程序找到解决方法
  3. mysql栈空间大小_jvm 堆内存 栈内存 大小设置
  4. 什么是滚雪球法的抽样方法?(Snowball sampling、snowballing approach)
  5. C语言 数组排序 – 冒泡法排序 - C语言零基础入门教程
  6. 37岁程序员被裁员,面试华为阿里被拒,无奈降薪去小公司,结局出乎意料!
  7. 程序猿的数学:scratch篇
  8. asp.net控件开发技巧(2)关闭基类不必要的功能
  9. MYSQL添加新用户 MYSQL为用户创建数据库 MYSQL为新用户分配权限(转)
  10. 线程安全问题和Synchronized的使用
  11. Android替换开机动画
  12. 数字电子技术之逻辑函数的化简及表示
  13. 调用情迁机器人发送微信或者QQ消息等即时通讯消息
  14. 如何下载VMWare虚拟机如何安装VMWare详细教程
  15. 这些手机隐藏功能你知道吗?
  16. 俞敏洪:100个句子记完的7000单词(1)
  17. 1.3 网页数据抓取
  18. JAVA基础(JAVA移位运算符)
  19. WPS表格打印的时候有非常多的空白页应该怎么办?
  20. 5步创建K8S Job,搞定批处理

热门文章

  1. 深部位移监测系统wk813应用边坡、大坝、堤防、铁路和建筑基坑开挖等深部位移测量
  2. 【 D3.js 高级系列 — 6.0 】 值域和颜色
  3. 美团点评2019年秋招部分编程题汇总 解题报告 Apare_xzc
  4. 健身房运营 | 除了派单,健身房高效拓客的4种方式!
  5. 操作系统与芯片的相爱!科东软件与龙芯中科实现产品兼容性互认证明
  6. braintree使用_使用Braintree v.zero SDK购买时间
  7. 网站导航颜色停留_中小企业网站直通车推广卓越服务
  8. 代码审计-php代码执行
  9. sql server 转换为mysql_SqlServer转换为Mysql
  10. 蓝桥杯第七届省赛 风扇模拟系统