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.