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--;是在当前位置上的所有合法取值都已经试验完毕,或者是刚刚输出了一个可行解之后执行的。
请问解题思路是什么?
你后来解出来了吗
不知道你这个问题是否已经解决, 如果还没有解决的话:你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,目前超出我们的服务范围,暂时无法为您解答。
首次提问人员可免费体验一次有问必答服务。目前首次提问的问题服务范围为:编程语言、Java开发、python、数据库、前端开发 领域专业技术问题,为您提供问题的解决思路和指导。不提供源码代写、项目文档代写、论文代写、作业代写、安装包资源发送或安装、软件使用指导等服务。
我们后续会持续优化,扩大我们的服务范围,为您带来更好地服务。