Java求解树结构各节点值:递归方法

        最近在做公司项目的时候,遇到了这样的一个需求,本人将需求进行了简化:已知一个树形结构的list,并且已知根节点的id和value以及每一个节点的rate和pid,要求算出每一个节点的value,前提是不知道树结构总共有几级节点。

        这里显然需要用到递归算法了,何谓递归算法,递归算法就是函数自己调用自己的算法,为什么要用递归算法,因为树结构不明确,在不知道树结构有几级或者已知树结构大于等于三级的情况下,本人推荐优先使用递归算法,递归算法节省程序代码量,优化了代码的设计,缺点是设计起来较为复杂,对逻辑思维要求较高,而且会占用额外的栈空间。

        代码如下:

public void saveorupdate(List<Tree> trees,String fjd,Double sum){
    for(Tree tree:trees){
        if(tree.getPid().equals(fjd)){
            tree.setZl(sum*tree.getRate());
            saveorupdate(trees,tree.getId(),tree.getZl());
        }
    }
}

       如代码所示,定义saveorupdate方法的时候,在方法内部也调用了该方法本身,只不过在方法内部要加上条件判断,并且在调用方法的时候,修改了传入参数。

       这里的条件判断,是为了收束树结构的发散,如果没有条件限制,会出现死循环的现象,而修改传入参数信息,则是为了计算之后叶子节点的信息。

       如此首次传入的fjd值为根节点的id,此后一旦遍历到一级叶子节点的时候,就会将求出值赋给该叶子,同时以该叶子为根继续调用该方法,直到该叶子下所有的节点统统计算完毕,再继续执行第二个一级节点的计算,直到计算出所有的节点信息。

       相信一定会有更好的解决办法或者更高效简洁的递归算法,初入职场,一边工作一边继续学习,将工作中学到的东西记录下来,方便以后的查阅,有不正确的地方,也欢迎大家提出指正,相互学习。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值