递归,递归实现树的结构获取

1.递归

今天要处理树tree,在获取树的结构时候,常用方法就是递归。

1.1.什么是递归

递归(Recursion)是一种在函数定义中使用的编程概念,指的是在函数的定义中调用函数自身的过程。递归函数可以解决一些需要反复进行相同操作的问题,通常用于树形数据结构、数列、排序等问题中。

在递归函数中,通常会有两个条件:基本情况(base case)和递归情况(recursive case)。基本情况是指不需要进行递归,可以直接返回结果的情况;递归情况则是需要继续调用函数自身的情况。通过不断地将问题分解为更小的子问题,直到达到基本情况,递归函数可以实现问题的逐步求解。

需要注意的是,递归函数需要有一个终止条件,否则会无限递归下去,导致程序崩溃。

1.2递归实现

主要通过函数、方法自己调用自己实现。

1.树节点定义

public class Node implements Serializable {

    @ApiModelProperty(value = "节点id", required = false)
    private String item_id;

    @ApiModelProperty(value = "父节点id", required = false)
    private String item_pid;

    @ApiModelProperty(value = "是否选中", required = false)
    private Boolean checked;

    @ApiModelProperty(value = "子节点", required = false)
    private List<Node> children;

}

2.递归实现获取选中节点

     public static void main(String[] args) throws Exception {

        List<Node> selNodes = new ArrayList<Node>();
        List<Node>  nodes= new ArrayList<Node>();//所有树节点集合;
        selNodes = getCheckNodes(nodes);//获取被选中的节点
    }


public  List<Node> getCheckNodes(List<Node>  nodes){
        Boolean checked = false;
        List<Node> checkedNodes = new ArrayList<Node>();
        List<Node> chileCheckedNodes = new ArrayList<Node>();
        List<Node> childNodes = new ArrayList<Node>();

        for( Node node:nodes){
            checked = node.getChecked();
            if(checked != null && checked){
                checkedNodes.add(node);
                childNodes = node.getChildren();
                if(childNodes!=null && childNodes.size()>0){
                    chileCheckedNodes =getCheckNodes(childNodes);//递归,调用本方法
                    for(node childNode:chileCheckedNodes){
                        checkedNodes.add(childNode);
                    }
                }
            }
        }

        return  checkedNodes;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值