电脑版
首页

搜索 繁体

第236章 声名鹊起(2/2)

先访问树,然后再访问

存储

先访问,然后再访问所有的树;

树的遍历

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

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

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

森林

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

中序遍历

后序遍历

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

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

本章已阅读完毕(请击下一章继续阅读!)

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

前序遍历

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

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

热门小说推荐

最近更新小说