2016-01-07 2 views
2

Я работаю над своей диссертационной работой, имеющей отношение к искусственному интеллектуальному домену.Древовидное представление в java

Я хочу создать систему рекомендаций в реальном времени, поэтому мне нужно представлять решения с деревом.

Мой главный вопрос: как я могу эффективно представлять это дерево? Я хочу упомянуть, что дерево будет проходить как снизу вверх, так и снизу. Также дерево не является двоичным, а узла, который у него есть, довольно много (более 100).

Сейчас у меня есть создать класс узла, как выше:

public class node { 

    private String nodeName; 
    private expectedValue ev; 
    private boolean isLeaf; 
    private boolean isRoot; 
    private List<node> listOfChildren = new ArrayList<node>(); 
    private node parent; 


    public node(String nodeName) { 
     super(); 
     this.nodeName = nodeName; 
    } 


    public node(String nodeName, boolean isLeaf, boolean isRoot, List<node> listOfChildren, node parent) { 
     super(); 
     this.nodeName = nodeName; 
     this.isLeaf = isLeaf; 
     this.isRoot = isRoot; 
     this.listOfChildren = listOfChildren; 
     this.parent = parent; 
    } 


    public void initializeNode(boolean isLeaf, boolean isRoot, List<node> listOfChildren, node parent) { 
     this.isLeaf = isLeaf; 
     this.isRoot = isRoot; 
     this.listOfChildren = listOfChildren; 
     this.parent = parent; 
    } 


    //getter and setter here...... 
} 

Но я считаю, что это не самый эффективный способ представить дерево ....

Итак, что такое эффективный способ представления дерева в Java и есть ли способ создать дерево динамически или мне нужно инициализировать его по одному узлу?

Спасибо!

+0

я помечено как «слишком широки»/«мнение, основанное», как нет правильного ответа на ваш запрос. Это также сильно зависит от точных требований дерева. Btw, вам не нужно «isLeaf» (listOfChildern.size() == 0) или «IsRoot» (parent == null). – Reinard

+0

Почему вы «верите, что это не самый эффективный способ представления дерева»? Каковы некоторые из проблем, которые вы видите с ним? – Dima

+0

Возможный дубликат [Реализация дерева в Java (корень, родители и дети)] (http://stackoverflow.com/questions/19330731/tree-implementation-in-java-root-parents-and-children) – RobAu

ответ

2

Я думаю, что вам не нужно так много переменных, которые будут переданы вашему конструктору. Это может быть намного проще. Я бы рекомендовал иметь отдельный static внутренний класс (вложенный класс) для Node. Кроме того, воспользоваться ява дженериков (<T>) Что-то вроде этого:

public class MyTree<T> { 

    private Node<T> root; 

    public MyTree(T rootData) { 
     root = new Node<T>(); 
     root.data = rootData; 
     root.children = new ArrayList<Node<T>>(); 
    } 

    public static class Node<T> { 
     private T data; 
     private Node<T> parent; 
     private List<Node<T>> children; 
    } 
} 

Как примечание стороны, есть древовидная структура реализована в JDK, который вы можете использовать даже без поворотно интерфейса. (javax.swing.treeTreeModel и TreeNode)

+0

(Этот комментарий не имеет отношения к содержанию этого ответа.) Мир полон чужих. Зачем делать врага, а не друга. Я немного передумал сегодня на ваш комментарий. Наслаждайтесь путешествием в S.O. (Странно, я не могу @ тебя). – smwikipedia

+1

Пожалуйста, отредактируйте свой пост, чтобы я мог их перепроверить. – smwikipedia

+0

@smwikipedia осуществлен. спасибо – Idos

Смежные вопросы