Loading docs/graph/images/prufer1.png 0 → 100644 +43.2 KiB Loading image diff... docs/graph/prufer.md +8 −2 Original line number Diff line number Diff line Loading @@ -48,11 +48,17 @@ vector<int> pruefer_code() { } ``` 也有一个线性的构造算法。 给一个例子吧,这是一棵 7 个结点的树的 Prufer 序列构建过程:  最终的序列就是 $2,2,3,3,2$ 。 当然,也有一个线性的构造算法。 ### 线性构造 线性构造的本质就是维护一个指针指向我们将要删除的结点。首先发现,叶结点数是非单增的。要么删一个,要么删一个得一个。(翻译到这突然就知道该怎么做了,然后对照原文发现没什么问题,于是自己口糊吧) 线性构造的本质就是维护一个指针指向我们将要删除的结点。首先发现,叶结点数是非严格单调递减的。要么删一个,要么删一个得一个。(翻译到这突然就知道该怎么做了,然后对照原文发现没什么问题,于是自己口糊吧) 于是我们考虑这样一个过程:维护一个指针 $p$。初始时 $p$ 指向编号最小的叶结点。同时我们维护每个结点的度数,方便我们知道在删除结点的时侯是否产生新的叶结点。操作如下: Loading Loading
docs/graph/prufer.md +8 −2 Original line number Diff line number Diff line Loading @@ -48,11 +48,17 @@ vector<int> pruefer_code() { } ``` 也有一个线性的构造算法。 给一个例子吧,这是一棵 7 个结点的树的 Prufer 序列构建过程:  最终的序列就是 $2,2,3,3,2$ 。 当然,也有一个线性的构造算法。 ### 线性构造 线性构造的本质就是维护一个指针指向我们将要删除的结点。首先发现,叶结点数是非单增的。要么删一个,要么删一个得一个。(翻译到这突然就知道该怎么做了,然后对照原文发现没什么问题,于是自己口糊吧) 线性构造的本质就是维护一个指针指向我们将要删除的结点。首先发现,叶结点数是非严格单调递减的。要么删一个,要么删一个得一个。(翻译到这突然就知道该怎么做了,然后对照原文发现没什么问题,于是自己口糊吧) 于是我们考虑这样一个过程:维护一个指针 $p$。初始时 $p$ 指向编号最小的叶结点。同时我们维护每个结点的度数,方便我们知道在删除结点的时侯是否产生新的叶结点。操作如下: Loading