java基本树型结构实现

最近复习数据结构,用java写一个树的模板,代码如下,写的比较仓促,如果有哪里写的不好,或者有错误,请在评论区提出,谢谢。

package Tree;

import java.util.ArrayList;
import java.util.List;
/**
 * 树节点
 * @author  *
 * @param <T>
 */
public class Node<T> {

    private T cont;//节点内容
    private Node<T> parent;//父节点
    public List<Node<T>> nodeList;//子节点列表
    /**
     * 构造函数
     * @param cont
     * @param parent
     * @param nodeList
     */
    public Node(T cont) {
        super();
        this.cont = cont;
        this.parent = null;
        this.nodeList = new ArrayList<Node<T>>();
    }
    public Node() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * get &set
     * @return
     */
    public T getCont() {
        return cont;
    }
    public void setCont(T cont) {
        this.cont = cont;
    }
    public Node<T> getParent() {
        return parent;
    }
    public void setParent(Node<T> parent) {
        this.parent = parent;
    }
    public List<Node<T>> getNodeList() {
        return nodeList;
    }
    public void setNodeList(List<Node<T>> nodeList) {
        this.nodeList = nodeList;
    }






}

——————————————-我是分割线—————————————

package Tree;
/**
 * 树类
 * @author  *
 * @param <T>
 */
public class Tree<T> {

    private Node<T> root;


    public Node<T> getRoot() {
        return root;
    }

    /**
     * 构造函数
     * @param root
     */
    public Tree(Node<T> root) {
        super();
    //  root.setParent(null);
        this.root = root;
    }
    public Tree(T rootCont) {
        super();
        this.root = new Node(rootCont);
    }

    /**
     * 增加新节点
     * @param curNode
     * @param newNode
     */
    public void addNewNode(Node<T> curNode,Node<T> newNode){
        if(newNode==null||curNode==null){
                return ;
        }
        newNode.setParent(curNode);
        curNode.nodeList.add(newNode);
    }
    /**
     * 遍历
     */
    public void traversal(Node<T> root){
        System.out.println("Traversal to"+root.getCont());
        for(Node<T> tempNode:root.getNodeList() ){
            traversal(tempNode);
        }
    }
    /**
     * 查找
     * @param root
     * @param searchcont
     * @return
     */
    private void searchHelp(Node<T> root,Node<T> result,T searchcont){
        if(root.getCont()==searchcont){
            result.setCont(root.getCont());
            result.setNodeList(root.nodeList);
            result.setParent(root.getParent());
        }

        for(Node<T> tempNode:root.getNodeList() ){
            searchHelp(tempNode,result,searchcont);
        }
    }
    public Node<T> search(Node<T> root,T searchcont){
        if(searchcont==null){return null;}
        Node<T> result=new Node<T>();
        searchHelp(root,result,searchcont);
        //System.out.println("search completed"+result.getCont());
        return result;
    }








}

——————————————-我是分割线—————————————

package Tree;

public class test {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        Tree<String> strTree=new Tree<String>(new Node<String>("系统管理"));
        strTree.addNewNode(strTree.search(strTree.getRoot(), "系统管理"), new Node<String>("部门管理"));
        strTree.addNewNode(strTree.search(strTree.getRoot(), "系统管理"), new Node<String>("岗位管理"));
        strTree.addNewNode(strTree.search(strTree.getRoot(), "系统管理"), new Node<String>("用户管理"));
        strTree.addNewNode(strTree.search(strTree.getRoot(), "岗位管理"), new Node<String>("岗位添加"));
        strTree.addNewNode(strTree.search(strTree.getRoot(), "岗位管理"), new Node<String>("岗位删除"));
        strTree.addNewNode(strTree.search(strTree.getRoot(), "用户管理"), new Node<String>("用户添加"));
        strTree.addNewNode(strTree.search(strTree.getRoot(), "用户管理"), new Node<String>("用户修改"));
        strTree.traversal(strTree.getRoot());//遍历结果
    }

}
$(function(){ $.fn.extend({ SimpleTree:function(options){ //初始化参数 var option = $.extend({ click:function(a){ } },options); option.tree=this; /* 在参数对象中添加对当前菜单的引用,以便在对象中使用该菜单 */ option._init=function(){ /* * 初始化菜单展开状态,以及分叉节点的样式 */ this.tree.find("ul ul").hide(); /* 隐藏所有子级菜单 */ this.tree.find("ul ul").prev("li").removeClass("open"); /* 移除所有子级菜单父节点的 open 样式 */ this.tree.find("ul ul[show='true']").show(); /* 显示 show 属性为 true 的子级菜单 */ this.tree.find("ul ul[show='true']").prev("li").addClass("open"); /* 添加 show 属性为 true 的子级菜单父节点的 open 样式 */ }/* option._init() End */ /* 设置所有超链接不响应单击事件 */ this.find("a").click(function(){ $(this).parent("li").click(); return false; }); /* 菜单项 接受单击 */ this.find("li").click(function(){ /* * 当单击菜单项 * 1.触发用户自定义的单击事件,将该 标签中的第一个超链接做为参数传递过去 * 2.修改当前菜单项所属的子菜单的显示状态(如果等于 true 将其设置为 false,否则将其设置为 true) * 3.重新初始化菜单 */ option.click($(this).find("a")[0]); /* 触发单击 */ /* * 如果当前节点下面包含子菜单,并且其 show 属性的值为 true,则修改其 show 属性为 false * 否则修改其 show 属性为 true */ /* if($(this).next("ul").attr("show")=="true"){ $(this).next("ul").attr("show","false"); }else{ $(this).next("ul").attr("show","true"); }*/ /* 初始化菜单 */ option._init(); }); /* 设置所有父节点样式 */ this.find("ul").prev("li").addClass("folder"); /* 设置节点“是否包含子节点”属性 */ this.find("li").find("a").attr("hasChild",false); this.find("ul").prev("li").find("a").attr("hasChild",true); /* 初始化菜单 */ option._init(); }/* SimpleTree Function End */ }); });
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值