【坐在马桶上看算法】算法9:开启“树”之旅

       咱们先来看一个例子。
101116gr944pr21oug8lro.png
       这是什么?是一个图?不对,确切的说这是一棵树。这哪里像树呢?不要着急咱们来变换一下。
100835alobvkhlozlk3ula.png
       是否是很像一棵倒挂的树,也就是说它是根朝上,而叶子朝下的。不像?哈哈,看完下面这幅图你就会以为像啦。
100836yof5r93sf99coer5.png
       你可能会问:树和图有什么区别?这个称之为树的东西貌似和无向图差很少嘛。不要着急,继续往下看。树其实就是不包含回路的连通无向图。你可能仍是没法理解这其中的差别,举个例子,以下。

 

100837qvf7y7bb9uqrjuhq.png         100837piei9iwrvvvergh9.png

 

       上面这个例子中左边的是一棵树,而右边的是一个图。由于左边的没有回路,而右边的存在1->2->5->3->1这样的回路。
       一、正是由于树有着“不包含回路”这个特色,因此树就被赋予了不少特性。
       二、一棵树中的任意两个结点有且仅有惟一的一条路径连通。
       三、一棵树若是有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文件夹。由于一棵树中的任意两个结点(这里就是文件夹)有且仅有惟一的一条路径连通。
       为了以后讲解的方便,咱们这里对树进行一些定义。
       首先,树是指任意两个结点间有且只有一条路径的无向图。 或者说,只要是没有回路的连通无向图就是树。
       喜欢思考的同窗可能会发现同一棵树能够有多种形态,好比下面这个两棵树。
100837y34w3tt3t3ttkt3a.png         100838hwwwoqwt08w8tstw.png
       为了肯定一棵树的形态,在一棵树中能够指定一个特殊的结点——根。咱们在对一棵树进行讨论的时候,将树中的每一个点称为结点,有的书中也称为节点。有一个根的树叫作有根树(哎,这不是废话嘛)。好比上方左边这棵树的树根是1号结点,右边这棵树的树根是3号结点。
       根又叫作根结点,一棵树有且只有一个根结点。根结点有时候也称为祖先。既然有祖先,理所固然就有父亲和儿子。好比上图右边这棵树中3号结点是一、6和7号结点的父亲,一、6和7号结点是3号结点的儿子。同时1号结点又是2号结点的父亲,2号结点是1号结点的儿子,2号结点与四、5号结点关系也显而易见了。
       父亲结点简称为父结点,儿子结点简称为子结点。2号结点既是父结点也是子结点,它是1号结点的子结点,同时也是4和5号结点的父结点。另外若是一个结点没有子结点(即没有儿子)那么这个结点称为叶结点,例如四、五、6和7号结点都是叶结点。没有父结点(即没有父亲)的结点称为根结点(祖先)。若是一个结点既不是根结点也不是叶结点则称为内部结点。最后每一个结点还有深度,好比5号结点的深度是4。哎,终于啰嗦完了,写的我汗都流出来了,没有理解的请看下面这幅插图吧。
101124ky0n8mlglwn3vvnx.png

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

 

       欢迎转载,码字不容易啊,转载麻烦注明出处算法

     【啊哈!算法】算法9:开启“树”之旅  http://bbs.ahalei.com/thread-4684-1-1.html数据结构

相关文章
相关标签/搜索