递归实现树的遍历,深度未知,广度未知

来源:互联网 发布:c语言dijkstra算法 编辑:程序博客网 时间:2024/04/28 15:47

大学的时候虽然数据结构考试成绩不错,但是却没有认真编码。现在工作,在做一个公式处理模块,要求能够公式套公式,而且公式还挺复杂。

这个问题纠结了我2个月了,一直就放到心头干别的模块,今天实在不行,赶紧请教csdn的大牛帮助解决。学习不少知识,关于递归

是这么一个逻辑,知道一个公式,然后要求利用已知的这个公式,查找下面的公式,一直到能够处理,然后再反向向上填充原来的公式,最终算出值。

 最顶层                                                       顶级公式

                                                                 /         |          \

 下一层                                           公式         公式    公式                                               

                                                  /         |                |           |

下一层                                 变量   公式          公式   公式

                                                        /     \               |          |

等等层                        。。。。。。。。。。。。。。。。

最底层                                    变量      变量                   变量

      

我把这个问题抽象成了一棵树,只不过树的深度,广度都未知。

下面是大牛的伪代码:

public void 深度优先遍历函数 (Node node, CallBack fun) {
  Nodes ns = node.所有子节点;
  for (Node n : ns) {
  深度优先遍历函数(n, fun);
  }
  fun(node);
}
注:CallBack 是遍历时需要对每个节点进行什么特殊计算或处理的回调接口函数。

这个要比具体程序好多了

我的公式处理伪代码

formulaOperation(id,arry)

    idList是数据查询的所有下一层公式id

    for(id in idlist){

        formulaOperation(id,arry)

        }   

    formulaOperation(id,arry)

这里的arry是一个数组。里面放着下级公式最终值和id,通过这样传递,这个arry是一个不断改变的能够实现公式的运算


原创粉丝点击