用非递归(迭代)算法求在给定二叉树的结点总数N的情况下,二叉树可能拥有的形状数M

函数原型为:void buildtree(int N,int &tree_count);即送入结点总数N,得到二叉树总数目tree_count。整个算法的总体结构如:

    …

while(idx>0){

    …

    if(…)

        idx++;

    else

        idx--;

    …

}

同问题一,需要设定一个长度为N的数组int arr[],idx为数组下标,当可以顺利确定当前下标上的结点编号之后,idx会自增以完成下一个位置上的计算。当idx到达N时,说明找到问题的一个解(即发现一棵新的二叉树),打印输出数组的内容。

语句idx--;是在当前位置上所有合法取值都已经试验完毕,或者是刚刚输出了一个可行解之后执行的。

请仔细设计算法使得它具有尽可能低的算法复杂度。

输出如:

1: 1, 2, 3

2: 1, 2, 4

3: 1, 2, 5

4: 1, 3, 6

5: 1, 3, 7

我猜测你是不会将递归的思路转化为迭代的思路。首先定义一个足够大小的数组,里面存储对应节点的值。然后设置当前下标 1 。然后就是第一个逻辑,如果 idx 没有到达 N,那么就查找下一个值,下一个值只会是上一个值的 2 倍,或者 2 倍+1,如果找到了就 idx ++。如果到了边界就 idx --。

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632