• 数据结构学习--Java树


    一、为什么需要使用树

    有序数组插入数据项太慢,不过查询快,因为存储数据地址都是连在一起的。

    链表查找数据太慢,不过插入删除快。

    二、路径

    顺着连接节点的边从一个节点到另一个节点,所经过的节点顺序排列称为路径。

    三、根

    树最上面的节点称为根节点。一棵树只有一个根。而且从根到任何节点有且只有一条路径。

    四、父节点

    每个节点都有一条边向上连接到另一个节点,这个节点就称为是下面这个节点的父节点。

    五、子节点

    每个节点都有一条边向下连接到另一个节点,下面的节点就是该节点的子节点。

    六、叶子节点

    没有子节点的节点称为叶子节点。

    七、子树

    每个节点都可以作为一个子树的根,它和它所有的子节点,子节点的子节点组合在一起就是一个子树。

    八、访问

    访问一个节点是为了在这个节点上执行一些操作,如查看节点的数据项,但是如果仅仅是经过一个节点,不认为是

    访问了这个节点。

    九、层

    一个节点的层是指从根开始到这个节点有多少代。

    十、二叉树

    树的每个节点最多只能有两个子节点的树。

    Node.java

    package com.example.deer;

    public class Node {
    //数据项
    public long data;
    //数据项
    public String sData;
    //左子节点
    public Node leftChild;
    //右子节点
    public Node rightChild;

    public Node(long data,String sData){
    this.data = data;
    this.sData = sData;
    }
    }

    Tree.java

    package com.example.deer;

    public class Tree {
    //根节点
    public Node root;

    /**
    * 插入节点
    * @param value
    */
    public void insert(long value,String sValue){
    //封装节点
    Node newNode = new Node(value,sValue);
    //引用当前节点
    Node current = root;
    //引用父节点
    Node parent;
    //如果root为null,也就是第一次插入的时候
    if(root == null){
    root = newNode;
    return;
    }else{
    while (true){
    //父节点指向当前节点
    parent = current;
    //如果当前指向的节点数据比插入的要大,则向左走
    if(current.data > value){
    current = current.leftChild;
    if(current == null){
    parent.leftChild = newNode;
    return;
    }
    }else{
    current = current.rightChild;
    if(current == null){
    parent.rightChild = newNode;
    return;
    }
    }
    }
    }
    }
    /**
    * 查找节点
    */
    public Node find(long value){
    //引用当前节点,从根节点开始
    Node current = root;
    //循环,只要查找值不等于当前节点的数据项
    while(current.data != value){
    //进行比较,比较查找值和当前节点的大小
    if(current.data > value){
    current = current.leftChild;
    } else {
    current = current.rightChild;
    }
    if(current == null){
    return null;
    }
    }
    return current;
    }
    }
  • 相关阅读:
    【BJOI2018】求和
    【洛谷P1613】跑路
    【NOI2001】食物链
    【NOI2002】银河英雄传说
    【POJ1456】Supermarket
    【NOIP2013】货车运输
    【CH#56C】异象石
    【POJ3417】Network
    【APIO2010】巡逻
    【CH6201】走廊泼水节
  • 原文地址:https://www.cnblogs.com/xiaohualu/p/11810535.html
Copyright © 2020-2023  润新知