不妨建一棵树二叉树来看
可以发现,我们要输出的结果刚好就是二叉树的中序遍历的结果
因此我们只需进行一次二叉树的中序遍历即可
代码如下:
int n;
//二叉树中序遍历
void dfs(int u, int num)
{
if (u > n) return;
dfs(u << 1, num + 1);
printf("%d ", num);
dfs(u << 1 | 1, num + 1);
}
int main ()
{
scanf("%d", &n);
dfs(1, 1);
return 0;
}