获取树形结构根节点到叶子节点的全路径

public class SplitorPath {

    //记录所有从根节点到叶子结点的路径
    private static List<String> pathList=new ArrayList<>();

    
    public List<DataLoadFilterItem> split() {

        //类目全路径
        Stack <TreeNodeVO> pathstack=new Stack();
		
		TreeNodeVO treeNodeVO = new TreeNodeVO();
		TreeNodeVO treeNodeVO1 = new TreeNodeVO();
        treeNodeVO1.setId("1"); 
		
		List<treeNodeVO> childList =  new ArrayList<>();
		childList.add(treeNodeVO1)
        treeNodeVO.setChildList(childList)	
        treeNodeVO.setId("2");		
		
		
		
        iteratorNode(treeNodeVO,pathstack);
		
		 for (String idPaths : pathList) {
            System.out.println(idPaths);
        }
		
    }


    /**
     * 利用栈递归获取根节点到叶子节点全路径
     * @param treeNodeVO
     * @param pathstack
     */
    private void iteratorNode(TreeNodeVO treeNodeVO, Stack<TreeNodeVO> pathstack) {
        pathstack.push(treeNodeVO);//入栈
        List childlist=treeNodeVO.getChildList();
        if(childlist==null){      //没有叶子 说明是叶子节点
            List lst=new ArrayList();
            Iterator stackIt=pathstack.iterator();
            while(stackIt.hasNext()) {
                lst.add(stackIt.next());
            }
            //路径拼接
            String idPath = jointPath(lst);
            //保存路径信息
            pathList.add(idPath);
            return;
        }else {
            Iterator it=childlist.iterator();
            while(it.hasNext()) {
                TreeNodeVO child=(TreeNodeVO)it.next();
                //深度优先 进入递归
                iteratorNode(child,pathstack);
                pathstack.pop();//回溯时候出栈
            }

        }

    }


    //拼接出路径
    private String jointPath(List lst) {
        StringBuilder idPath = new  StringBuilder();
        for (int i = 1; i < lst.size(); i++) {
            TreeNodeVO n=(TreeNodeVO)lst.get(i);
            idPath.append(n.getId()).append("-");
        }
        return idPath.toString();
    }

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值