weixin_42430769 2021-06-11 09:43 采纳率: 0%
浏览 295

设计一个递归算法,求在给定二叉树的结点总数N的情况下,二叉树可能拥有的形状

1.满足要求的任何一棵二叉树都是高度为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

并不需要实际构造出一棵二叉树,只需要把各种可能的合法编号序列计算出来就能统计二叉树的数目,因此重点是编写算法arrange(),要求输出每一个合法的序列

2.用非递归(迭代)算法解决问题一。函数原型为: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--;是在当前位置上的所有合法取值都已经试验完毕,或者是刚刚输出了一个可行解之后执行的。

 

请问解题思路是什么?

  • 写回答

3条回答 默认 最新

  • m0_64287036 2022-04-23 09:52
    关注

    你后来解出来了吗

    评论

报告相同问题?

悬赏问题

  • ¥100 对接googlepay/googlewallet咨询
  • ¥15 Odoo 17系统中如何配置自动更新生产成本功能
  • ¥15 如何提取京东订单生成QQ支付链接
  • ¥50 游戏中的像素着色器获取到的法线贴图错误怎么解决
  • ¥15 把从欧空局下载的哨兵一号数据导入snap的时候出现这个问题该怎么解决😥
  • ¥15 蓝桥杯stm322016年省赛试题中遇到的问题
  • ¥15 有没有ND4J能用的MAVEN地址
  • ¥15 外接电阻采用星形连接,测量一个电阻的相电压,用数据采集卡进行显示,而电机旋转转速有1300r/min,按照此电机的转速常数,应该电压值为15v左右
  • ¥100 oracle sgd 部署概要
  • ¥20 escpos打印到CUPS打印机