一.多叉树变二叉树。
这个技巧其实也有两种具体的方法:树的孩子兄弟表示法与dfs序法。
1.树的孩子兄弟表示法。
大家在学习树形结构时一定接触了一个多叉树变二叉树的方法,就是把每个点与它的第一个儿子连边,然后将它的儿子依次连接起来。可以结合下面的图片理解这句话。
总结成口诀就是:第一个儿子是左子树,其他儿子是左子树的右子树(似乎并不押韵,手动滑稽)
2.dfs序法
dfs序就是对一个树进行一个dfs,然后对于每个点记录一个时间戳dfn数组,这个时间戳就是这个节点的dfs序,然后我们再记录一个size数组,表示以每个节点为根的子树中节点的数量。
假设根节点是u,那么可以容易的推出
第一个儿子的dfs序dfn[first_son]就是df