数据结构二叉树的问题

设计一个递归算法,求在给定二叉树的结点总数N的情况下,二叉树可能拥有的形状数M。
请看如下说明和要求:满足要求的任何一棵二叉树都是高度为N的满二叉树从根结点开始的子树。
将这棵满二叉树的结点按照从上至下、从左至右的顺序进行编号,根结点的编号为1,则可以按层次输出任何结点总数为N的二叉树的所有结点编号。
例如当N=3时,输出结果为:
1: 1, 2, 3
2: 1, 2, 4
3: 1, 2, 5
4: 1, 3, 6
5: 1, 3, 7
tree_count is 5 when N is 3
递归函数的原型是:void arrange(int arr[],int idx,int N,int &tree_count);其中arr是存放编号序列的数组,idx是当前需要计算的数组元素的下标,N是结点总数也是数组长度,tree_count记录二叉树的数目。

武大的是吧,可以看一下这个,我运行的是对的但我看不懂原理https://blog.csdn.net/qq_37080070/article/details/108687402