您的位置:首页 > 编程语言 > Java开发

java遍历树

2014-01-14 10:23 316 查看
public class TreeTool {

 /**

     * 将集合建立成树结构

     *

     * @param dirs

     * @return

     */

    public List<Nav2> buildListToTree(List<Nav2> dirs) {

        List<Nav2> roots = findRoots(dirs);

        @SuppressWarnings("unchecked")

  List<Nav2> notRoots = (List<Nav2>) CollectionUtils.subtract(dirs, roots);

        for (Nav2 root : roots) {

            root.setChildren(findChildren(root, notRoots));

        }

        return roots;

    }

    /**

     * 找出集合中的根元素

     *

     * @param allDirs

     * @return

     */

    public List<Nav2> findRoots(List<Nav2> allNav2s) {

        List<Nav2> results = new ArrayList<Nav2>();

        for (Nav2 Nav2 : allNav2s) {

            boolean isRoot = true;

            for (Nav2 comparedOne : allNav2s) {

                if (Nav2.getPid() == comparedOne.getId()) {

                    isRoot = false;

                    break;

                }

            }

            if (isRoot) {

//                Nav2.setLevel(0);

                results.add(Nav2);

//                Nav2.setRootId(Nav2.getId());

            }

        }

        return results;

    }

    /**

     * 递归找子目录

     *

     * @param root

     * @param allDirs

     * @return

     */

    @SuppressWarnings("unchecked")

    public List<Nav2> findChildren(Nav2 root, List<Nav2> allNav2s) {

        List<Nav2> children = new ArrayList<Nav2>();

        for (Nav2 comparedOne : allNav2s) {

            if (comparedOne.getPid() == root.getId()) {

//                comparedOne.setParent(root);

//                comparedOne.setLevel(root.getLevel() + 1);

                children.add(comparedOne);

            }

        }

        List<Nav2> notChildren = (List<Nav2>) CollectionUtils.subtract(allNav2s, children);

        for (Nav2 child : children) {

            List<Nav2> tmpChildren = findChildren(child, notChildren);

//            if (tmpChildren == null || tmpChildren.size() < 1) {

//                child.setLeaf(true);

//            } else {

//                child.setLeaf(false);

//            }

            child.setChildren(tmpChildren);

        }

        return children;

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java遍历树