prufer序列
prufer序列
序列是无根树的序列化表示,有标号的无根树与长度为 的 序列构成双射。
构造方法
将度数为 的节点定义为叶子节点。
对于一棵有标号的无根树,构造一个 序列:
-
找到编号最小的一个叶子节点,记为 ,将与 相连的节点记为 。
-
删去 ,将 节点加入 序列。
-
重复 操作,直到树中只剩下两个节点为止。
对于一个 序列,构造一棵无根树:
设未在 序列中出现的点构成的点集为
-
取出 序列中第一个元素 ,找到 中编号最小的点记为 。
-
将 与 连边,在 序列中删除 。
-
重复 操作直到 序列为空。
prufer 序列的一些性质
-
对于树中的一个节点 ,它在 序列中出现的次数 它的度数 。
证明从略:
每删去一个与 相连的节点时, 便会在 序列中出现一次,
而删去 的时候,它必定也只会与一个节点相连,于是 在 序列中出现的次数就是度数 。
具体实现可以采用 维护最小值,时间复杂度
也可以用指针维护:时间复杂度 。
不过 序列的主要作用不在于如何构造或还原一棵树,它的主要应用在于对无标号图的组合计数。
题解:树的计数
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】