java用list实现数据库中的树的保存

本文介绍了一种使用Java实现树形数据结构的方法,通过递归方式构建树,并详细展示了如何从包含多个树节点的列表中创建树结构。

 

 

package com.cs.dataStructure.Tree数操作.java建树;

import java.util.ArrayList;
import java.util.List;
 //定义(数据库中)树中的属性
class Tree{
    private int ruleId;
    private int parentId;
    List<Tree> child;

    public int getRuleId() {
        return ruleId;
    }

    public void setRuleId(int ruleId) {
        this.ruleId = ruleId;
    }

    public int getParentId() {
        return parentId;
    }

    public void setParentId(int parentId) {
        this.parentId = parentId;
    }

    public List<Tree> getChild() {
        return child;
    }

    public void setChild(List<Tree> child) {
        this.child = child;
    }
}
public class Main {

    /** 递归建树
     * @param parentTree
     * @param listTree
     * @return
     */
    Tree setTree(Tree parentTree,List<Tree> listTree){ //传入树的根结点 和装有所有树的结点list
        for(Tree tree:listTree){
            if(parentTree.getRuleId() ==tree.getParentId()){  // 遍历找到母结点的所有子结点并将它们加入到对应的集合中
                if(parentTree.getChild()==null){
                    parentTree.setChild(new ArrayList<Tree>());
                }
                parentTree.getChild().add(setTree(Tree tree, listTree));
            }
        }
        return parentTree; //递归返回条件 当最后的结点已经没有根结点了,返回最后的结点(它自己也是一个母结点)
    }

    void setTree(Tree parentTree, List<Tree> listTree){
          for(Tree tree : listTree){
                if(parentTree.getRuleId() ==tree.getParentId()){  // 遍历找到母结点的所有子结点            
                parentTree.getChild().add(tree);
                setTree(parentTree, listTree); //为空类型的效率更高, 不用返回数据装填
          应该
   }

    Tree TreeforSetTree(List<Tree> listTree){
        //建立母结点
        Tree tree = new Tree();
        for(Tree rootNode:listTree){
            //将母结点的根节点加入进tree的list中
            if(rootNode.getParentId()==0){        //无论判断成功与否 都会进入下一循环
                if(tree.getChild()==null){
                    List<Tree> childList = new ArrayList<Tree>();
                    tree.setChild(childList);
                }
                tree.getChild().add(rootNode);
            for(Tree childNode : listTree){
                if(childNode.getParentId()==rootNode.getRuleId()){
                    if(rootNode.getChild()==null){
                        List<Tree> childNodeList = new ArrayList<Tree>();
                        rootNode.setChild(childNodeList);
                    }
                    rootNode.getChild().add(childNode);
                }
            }

            }
        }
        return tree;
    }

}

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值