题目描述见链接 .
正解部分
题目要求 字典序最小 的 伪二叉树,
我们只需要在满足 一颗子树编号全部比根节点小, 另一颗子树编号全部比根节点大 的前提下 , 使得 序号越小的节点编号越小 即可 .
这个问题可以 分治 解决,
设 mn[k] 表示 以 k 为根的子树中最小序号为 k, 当前可分配的编号区间为 [l,r], 当前根节点为 k,
分类讨论:
- 有两个儿子,
- mn[k]=k:
- 两子树大小不等, 此时哪颗子树的 size 小, 就取哪颗子树当 左子树.
- 两子树大小相等, 此时比较两颗子树的 mn[], 取较小值当 左子树 .
- mn[k]�=k: 取两颗子树中 mx[] 较小的当 左子树 ,
- 有一个儿子,
- mn[k]=mn[lt]: lt 当 左子树 .
- mn[k]�=mn[lt]: lt 当 右子树 .
实现部分
咕咕咕 .