Java中的可修改树实现

时间:2017-05-07 14:47:28

标签: java algorithm data-structures tree

我创建了一个树形结构,类似于下面的图像。最初,每个节点都包含一组数字。

将子项添加到节点时,子项的数字集与父项的数字集的交集将存储在子项中。最后,父节点有一个集合,它基本上是所有子集集合的集合(任何不属于任何子集的数字都将被删除)。

为了做到这一点,我将所有数字存储在List(在Tree类中)中,并为每个节点提供两个索引(leftIndex,rightIndex)以从List中标识自己的一组数字。 (例如,在下面的树中,列表包含21个数字,节点A包含14个数字,在列表中为0到13)

Tree Structure

节点结构:

public class Node<T> {
    private List<Node<T>> children = new ArrayList<Node<T>>();
    private Node<T> parent = null;
    private T data = null;

    public Node(T data){
        this.data = data;
    }

    public Node(T data, Node<T> parent){
        this.data = data;
        this.parent = parent;
    }

    public List<Node<T>> getChildren(){
        return  children;
    }

    public void setParent(Node<T> parent){
        this.parent = parent;
    }

    public void addChild(Node<T> child){
        child.setParent(this);
        this.children.add(child);
    }

    public Node<T> getParent() {
        return parent;
    }

    public T getData() {
        return this.data;
    }

    public void setData(T data) {
        this.data = data;
    }

    public boolean isRoot() {
        return (this.parent == null);
    }

    public boolean isLeaf() {
        return this.children.size() == 0;
    }

    public void removeParent() {
        this.parent = null;
    }

    public Node() {
    }
}

NodeData:

public class NodeData{

    private int leftIndex;
    private int rightIndex;
    private int level;
}

树形结构:

public class Tree<V>{
    private String[] parameters;
    private String[][] parameterValues;
    private int height;
    private Node<V> root;
    private List<Long> aggregatedNumbersList = new ArrayList<>();//contains all the leaf node numbers 
    private List<Node<NodeData>> leafNodes = new ArrayList<>();
}

现在,根据上面的树,我想创建下面的树。在下面的树节点中修改了节点级别,但数字列表保持不变。每个层次结构包含与上述树相同的一组数字(例如,节点A,节点C对包含一组四个数字)。

那么,我该如何创建一个动态树,其中可以修改级别并添加任何新节点。

Modified Tree Structure

0 个答案:

没有答案