文章结束给大家来个程序员笑话:[M]
一、树(Tree)是n(n>=0)个结点的限有集。n=0时称为空树。在恣意一棵非空树中:(1)有且有仅一个特定的称为根(root)的结点。
(2)当n>1时,其余结点可分为m(m>0)个互不交相的限有集T1,T2,....,Tm, 其中每个集合本身又是一棵树,并且称为根的子树(SubTree),如图1所示:
图1
树的义定中之还用到了树的念概,即递归义定。如图2中的子树T1和T2就是根结点A的子树。当然D,G,H,I 构成的的树又是B结点的子树,E,J 构成的树是C结点的子树。
图2
对于树的义定还需要意注两点:
1.n>0时根结点是一唯的,不可能存在多个根结点。
2.m>0时,子树的个数没限有制,但它们一定是互不交相的。如图3中的两个结构就不符合树的义定,因为它们都有交相的子树。
图3
二.树的结点包括一个数据素元及多少指向其子树的分支。结点具有的子树称为结点的度(Degree)。度为0的结点称为叶结点(Leaf)或端终结点;度不为0的结点称为非端终结点或分支结点,除根结点外之,分支结点也称为部内结点。树的度是树内各结点的度的最大值。如图4,因为这棵树结点的度的最大值是结点D的度3,所以树的度也为3。
图4
结点的子树的根称为该结点的孩子(Child),响应地,该结点称为孩子的双亲(Parent),一同个双亲的孩子之间互称为兄弟(Sibling)。结点的先祖是从根到该结点所经分支上的全部结点。所以对于H说来,D,B,A都是它的先祖。反之,以某结点为根的子树中的任一结点都称为该结点的子孙。B的子孙有D,G,H,I,如图5所示。
图5
三、结点的次层(Level)从根开始义定起,根为第一层,根的孩子为第二层。其双亲在一同层的结点互为从兄弟。显然在图6中D,E,F都是从兄弟,而G,H,I 与 J也是从兄弟。树中结点的 最大次层称为树的深度(Depth)或度高,以后树的深度为4。
图6
若将树中每个结点的各子树看成是从左到右有序次的(即不能互换),则称该树为有序树(OrderedTree);否则称为无序树(UnorderedTree)。意注:若不特殊指明,一般论讨的树都是有序树。
丛林(Forest)是m(m≥0)棵互不交相的树的集合。对树中每个结点而言,其子树的集合即为丛林。对于图1的树而言,图2的两棵子树其实以可就理解为丛林。树和丛林的念概邻近。删去一棵树的根,就失掉一个丛林;反之,加上一个结点作树根,丛林就变成一棵树。
比对线性表与树的结构,它们有很大不同,如图7所示。
图7
参考:《谎话数据结构》
文章结束给大家分享下程序员的一些笑话语录:
某程序员对书法十分感兴趣,退休后决定在这方面有所建树。花重金购买了上等的文房四宝。一日突生雅兴,一番磨墨拟纸,并点上了上好的檀香,颇有王羲之风 范,又具颜真卿气势,定神片刻,泼墨挥毫,郑重地写下一行字:hello world.