Saltar al contenido

Implementación de árbol en Java (root, padres e hijos)

Posterior a de nuestra larga compilación de información pudimos solucionar este enigma que presentan ciertos los lectores. Te ofrecemos la respuesta y nuestro deseo es servirte de mucha ayuda.

Solución:

import java.util.ArrayList;
import java.util.List;

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

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

    public Node(T data, Node parent) 
        this.data = data;
        this.parent = parent;
    

    public List> getChildren() 
        return children;
    

    public void setParent(Node parent) 
        parent.addChild(this);
        this.parent = parent;
    

    public void addChild(T data) 
        Node child = new Node(data);
        child.setParent(this);
        this.children.add(child);
    

    public void addChild(Node child) 
        child.setParent(this);
        this.children.add(child);
    

    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;
    

Ejemplo:

import java.util.List;

Node parentNode = new Node("Parent"); 
Node childNode1 = new Node("Child 1", parentNode);
Node childNode2 = new Node("Child 2");     

childNode2.setParent(parentNode); 

Node grandchildNode = new Node("Grandchild of parentNode. Child of childNode1", childNode1); 
List> childrenNodes = parentNode.getChildren();

La respuesta aceptada arroja un java.lang.StackOverflowError al llamar al setParent o addChild métodos.

Aquí hay una implementación un poco más simple sin esos errores:

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

    public MyTreeNode(T data) 
        this.data = data;
    

    public void addChild(MyTreeNode child) 
        child.setParent(this);
        this.children.add(child);
    

    public void addChild(T data) 
        MyTreeNode newChild = new MyTreeNode<>(data);
        this.addChild(newChild);
    

    public void addChildren(List children) 
        for(MyTreeNode t : children) 
            t.setParent(this);
        
        this.children.addAll(children);
    

    public List getChildren() 
        return children;
    

    public T getData() 
        return data;
    

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

    private void setParent(MyTreeNode parent) 
        this.parent = parent;
    

    public MyTreeNode getParent() 
        return parent;
    

Algunos ejemplos:

MyTreeNode root = new MyTreeNode<>("Root");

MyTreeNode child1 = new MyTreeNode<>("Child1");
child1.addChild("Grandchild1");
child1.addChild("Grandchild2");

MyTreeNode child2 = new MyTreeNode<>("Child2");
child2.addChild("Grandchild3");

root.addChild(child1);
root.addChild(child2);
root.addChild("Child3");

root.addChildren(Arrays.asList(
        new MyTreeNode<>("Child4"),
        new MyTreeNode<>("Child5"),
        new MyTreeNode<>("Child6")
));

for(MyTreeNode node : root.getChildren()) 
    System.out.println(node.getData());

Aquí está mi implementación en java para su requerimiento. En la clase treeNode que usé genérico array para almacenar los datos del árbol. también podemos usar lista de arreglo o dinámica array para almacenar el valor del árbol.

public class TreeNode 
   private T value = null;
   private TreeNode[] childrens = new TreeNode[100];
   private int childCount = 0;

    TreeNode(T value) 
        this.value = value;
    

    public TreeNode addChild(T value) 
        TreeNode newChild = new TreeNode(value, this);
        childrens[childCount++] = newChild;
        return newChild;
    

    static void traverse(TreeNode obj) 
        if (obj != null) 
            for (int i = 0; i < obj.childCount; i++) 
                System.out.println(obj.childrens[i].value);
                traverse(obj.childrens[i]);
            
        
        return;
    

    void printTree(TreeNode obj) 
        System.out.println(obj.value);
        traverse(obj);
    

Y la clase de cliente para la implementación anterior.

public class Client 
    public static void main(String[] args) 
        TreeNode menu = new TreeNode("Menu");
        TreeNode item = menu.addChild("Starter");
            item = item.addChild("Veg");
                item.addChild("Paneer Tikka");
                item.addChild("Malai Paneer Tikka");
            item = item.addChild("Non-veg");
                item.addChild("Chicken Tikka");
                item.addChild("Malai Chicken Tikka");
        item = menu.addChild("Main Course");
            item = item.addChild("Veg");
                item.addChild("Mili Juli Sabzi");
                item.addChild("Aloo Shimla Mirch");
            item = item.addChild("Non-veg");
                item.addChild("Chicken Do Pyaaza");
                item.addChild("Chicken Chettinad");
        item = menu.addChild("Desserts");
                item = item.addChild("Cakes");
                        item.addChild("Black Forest");
                        item.addChild("Black Current");
                item = item.addChild("Ice Creams");
                        item.addChild("chocolate");
                        item.addChild("Vanilla");
        menu.printTree(menu);
    

PRODUCCIÓN

Menu                                                                     
Starter                                                                 
Veg                                                                
Paneer Tikka                                                        
Malai Paneer Tikka                                                    
Non-veg                                                              
Chicken Tikka                                                      
Malai Chicken Tikka                                                 
Main Course                                                      
Veg                                                             
Mili Juli Sabzi                                                   
Aloo Shimla Mirch                                                  
Non-veg                                                               
Chicken Do Pyaaza                                                   
Chicken Chettinad                                                    
Desserts                                                         
Cakes                                                            
Black Forest                                                     
Black Current                                                   
Ice Creams                                                      
chocolate                                                       
Vanilla           

Tienes la posibilidad dar recomendación a esta sección si te valió la pena.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *