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());//遍历结果
    }

}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值