这可能是本学期学习数据结构与算法课的最大收获
算法描述
筛选法作用在一棵二叉树上
筛选法就是将所有非叶子节点
显然这个操作得到的是一个堆
复杂度证明
考虑$n$层的完美二叉树
$$\begin{aligned} & \sum_{k=1}^{n}(n-k)2^{k-1}\\ = & n\sum_{k=1}^{n}2^{k-1}-\sum_{k=1}^{n}k2^{k-1}\\ = & (n2^n-n)-(\sum_{k=1}^{n}2^{k-1}+\sum_{k=2}^{n}2^{k-1}+...+\sum_{k=n}^{n}2^{k-1})\\ = & (n2^n-n)-\Big[(2^n-2^0)+(2^n-2^1)+...+(2^n-2^{n-1})\Big]\\ = & (n2^n-n)-(n2^n-2^n+1)\\ = & 2^n - n - 1 \end{aligned} $$
是元素个数级别的
这个算法不占用辅助空间