第236章 声名鹊起

少年的我 / 著投票加入书签

书迷读 www.shumidu.com,最快更新我哥居然成神了最新章节!

    苏小北也懒得去追,只看那瑟缩在地上的雪儿,淡淡地说道:“少主,你要求我杀的白狼王,我已经杀了,你是不是该把息壤给我了?”

    雪儿听了这话,心里暗自翻了个白眼,又不动声色的把自己肩头的衣服再往下拉了一点,又柔柔弱弱的说道:“既然公子已经完成了我们的交易,我自然要将息壤奉上,只是,雪儿还想请公子帮一个小忙。”

    苏小北:“什么忙?”

    雪儿:“雪儿想让公子护送雪儿回到兔族,狼族族长外出,找了替身前来打斗,一定还有更大的图谋,我们不得不防!”

    “只是雪儿现在受了重伤,无法独自回去,又怕半路上有狼妖阻拦,所以想请公子护送雪儿回去。”

    雪儿一口气把过程全部说完,这时,就见到苏小北的表情……十分的一言难尽!

    这个雪儿是怎么回事?

    他辛辛苦苦打杀了

    如果一个无向简单图G 满足以下相互等价的条件之一,那么G 是一棵树:

    G 是没有回路如果去掉任意一条边,就不再连通。

    G 是连通的,并且3顶点的完全图?不是G的子图。

    G内的任意两个顶点能被唯一路径所连通。

    如果无向简单图G有有限个顶点(设为n个顶点),那么G 是一棵树还等价于:

    G是连通的,有n ? 1条边,并且G没有简单回路。

    如果一个无向简单图G中没有简单回路,那么G是森林。

    性质

    一棵树中每两个点之间都有且只有一条路径(指没有重复边的路径)。一颗有N个点的树有N-1条边,也就是连接N个点所需要的最少边数。所以如果去掉树中的一条边,树就会不连通。

    如果在一棵树中加入任意的一条边,就会得到有且只有一个环的图。这是因为这条边连接的两个点(或是一个点)中有且只有一条路径,这条路径和新加的边连在一起就是一个环。如果把一个连通图中的多余边全部删除,所图)。树可以算是稀疏图。

    显然树中也没有自环和重复边。

    有根树

    在一棵树中可以指定靠近根的那个节点叫做另一个节点的父节点(也叫父亲、双亲、。。。。

    叫孩子,儿子,子女等……父亲方向的所有节点都叫做这个节点的祖先,,儿子方向的所有节点都叫做这个节点的子孙。没有子节点的子节点叫做叶节点(或者叶子节点)。由于到根的路径只有一条,根节点以外的节点的父节点永远只有一个,祖先就是这个点到根的路径上的所有节点(包括根,不包括这个节点本身)。另外,以一个节点为根的树是指包括这个节点和其所有子孙,并以这个节点为根的树。由于一般不需要这以外的子树,每一个节点也可以对应到一个以其为根的树,一个节点的子树通常也是指以这个节点的子节点为根的树。

    如果一颗有根树每个节点的子树最多有n个,同时每个节点在其父节点中都有固定的可能可以留空的位置,这棵树叫做n叉树。其中每个节点都可以有两个固定位置的子树的有根树叫做二叉树,二叉树中每个节点的两个子树分别叫做左子树和右子树,由于位置固定,没有左子树的时候也是可以有右子树的。而“多叉树”通常并不指n为任意值的n叉树,只是在和n叉树作比较的时候表示普通的有根树。

    对于随机的树,高度的平均复杂度是O(logn),但是没有限制而且不随机的树高度也可以达到O(n),也就是除了叶节点都只有一个子树,或者常数个分支的情况。所以树作为数据结构时通常需要另外进行平衡。

    存储

    对于普通的树,可以像图一样为每一个点存储一个边表(通常按顺序存和每一个点的关系的叫做邻接矩阵,存具体的边的叫做邻接表),或者直接存储所有边的边表等。由于树是稀疏图,所以一般不用邻接矩阵存储。对于有根树,如果用为每一个点储存一个边表的方法,由于每一棵树都只有一个父节点,所以通常指向父节点的边不存在这个表中。同时如果子节点是没有顺序的,也是因为一个节点的子节点不会同时是其他节点的子节点,也可以把子节点直接当成存边的链表的节点,这时候每个节点只需要储存两个指针,所以这种存储方法有时候也会被叫做多叉树转二叉树。

    对于子节点是有顺序的有根树,每条边都可以以固定的位置分别储存。对于完全二叉树甚至能直接用一个数组访问所有节点,不另外储存边的信息。有的树可以被设计成固定的从根节点开始访问,这时候可以不储存父节点。同样的,有的树也可以省略子节点,例如并查集。

    树的遍历

    对于一般的树,可以用和普通的图一样的方法遍历,比如深度优先搜索和宽度优先搜索。如果和树的每个节点相邻的点有固定的顺序,深度优先搜索可以不储存当前点以外的任何信息,而且不用判重。而在有根树中更方便,所以有根树中很少使用宽度优先搜索。

    对于有根树的从根开始的深度优先搜索遍历,有三种特定的顺序:

    前序遍历

    先访问根节点,然后再访问所有的子树;

    后序遍历

    先访问子树,然后再访问根节点;

    中序遍历

    二叉树专用,先访问左子树,然后是根节点,最后是右子树。

    注意对于每一种遍历,事实上都得先访问根节点,这里的遍历顺序是指处理节点中的数据的顺序。已知中序遍历和任一其他遍历的情况下,可以还原一个二叉树。一个直观的方法是按前序或者反转的后序插入一个按中序排序的搜索树。已知前序和中序也可以还原一棵树,但是不能知道二叉树中一个节点唯一的子树是在左边还是右边。

    事实上也可以把左右的顺序反过来。这些由根开始的遍历方法也适用于特定的一个子树。

    森林