Initial Setup
This commit is contained in:
commit
600cc73df6
28
src/BreadthFirstSearch.java
Normal file
28
src/BreadthFirstSearch.java
Normal file
@ -0,0 +1,28 @@
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.function.Predicate;
|
||||
|
||||
public class BreadthFirstSearch
|
||||
{
|
||||
public Node breadthFirstSearch(List<Node> nodes, Node target)
|
||||
{
|
||||
var newNodes = new ArrayList<Node>();
|
||||
|
||||
for (Node node : nodes)
|
||||
{
|
||||
if (target.equals(node))
|
||||
{
|
||||
return node;
|
||||
}
|
||||
|
||||
newNodes.addAll(node.getChildren());
|
||||
}
|
||||
|
||||
if (newNodes.isEmpty())
|
||||
{
|
||||
return breadthFirstSearch(newNodes, target);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
31
src/Main.java
Normal file
31
src/Main.java
Normal file
@ -0,0 +1,31 @@
|
||||
import java.util.List;
|
||||
|
||||
public class Main
|
||||
{
|
||||
public static void main(String[] args)
|
||||
{
|
||||
var root = new Node(0);
|
||||
|
||||
var childOne = new Node(1);
|
||||
var childTwo = new Node(2);
|
||||
var childThree = new Node(3);
|
||||
|
||||
var childrenLayer1 = List.of(childOne, childTwo, childThree);
|
||||
root.addChildren(childrenLayer1);
|
||||
|
||||
var childFour = new Node(4);
|
||||
var childFive = new Node(5);
|
||||
|
||||
var children2 = List.of(childFour, childFive);
|
||||
childOne.addChildren(children2);
|
||||
|
||||
var childSix = new Node(6);
|
||||
var children3 = List.of(childSix);
|
||||
childTwo.addChildren(children3);
|
||||
|
||||
System.out.println(root);
|
||||
|
||||
|
||||
System.out.println(new BreadthFirstSearch().breadthFirstSearch(List.of(root), new Node(2)));
|
||||
}
|
||||
}
|
102
src/Node.java
Normal file
102
src/Node.java
Normal file
@ -0,0 +1,102 @@
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
public class Node
|
||||
{
|
||||
private Object value;
|
||||
|
||||
private Node parent;
|
||||
|
||||
private List<Node> children;
|
||||
|
||||
public Node(Object value)
|
||||
{
|
||||
this(value, new ArrayList<>());
|
||||
}
|
||||
|
||||
public Node(Object value, List<Node> children)
|
||||
{
|
||||
this.value = value;
|
||||
this.children = children;
|
||||
|
||||
for (Node child : children)
|
||||
{
|
||||
child.setParent(this);
|
||||
}
|
||||
}
|
||||
|
||||
public void addChildren(List<Node> children)
|
||||
{
|
||||
this.children.addAll(children);
|
||||
}
|
||||
|
||||
public void addChild(Node child)
|
||||
{
|
||||
this.children.add(child);
|
||||
}
|
||||
|
||||
public void removeChild(Node child)
|
||||
{
|
||||
this.children.remove(child);
|
||||
}
|
||||
|
||||
public Object getValue()
|
||||
{
|
||||
return value;
|
||||
}
|
||||
|
||||
public void setParent(Node parent)
|
||||
{
|
||||
this.parent = parent;
|
||||
}
|
||||
|
||||
public Node getParent()
|
||||
{
|
||||
return parent;
|
||||
}
|
||||
|
||||
public List<Node> getChildren()
|
||||
{
|
||||
return children;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o)
|
||||
{
|
||||
if (this == o)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
if (o == null || getClass() != o.getClass())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
Node node = (Node) o;
|
||||
return value.equals(node.value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode()
|
||||
{
|
||||
return Objects.hash(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
StringBuilder builder = new StringBuilder();
|
||||
|
||||
for (Node child : children)
|
||||
{
|
||||
builder.append(this.value).append(" -> ").append(child.getValue()).append("\n");
|
||||
}
|
||||
|
||||
for (Node child : children)
|
||||
{
|
||||
builder.append(child);
|
||||
}
|
||||
|
||||
return builder.toString();
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user