Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.*;
- import java.util.function.Consumer;
- public class Tree<T> {
- private T value;
- private Tree<T>[] children;
- public Tree(T value, Tree<T>... children) {
- this.value = value;
- this.children = children;
- }
- // append output to builder
- public String print(int indent, StringBuilder builder) {
- String emptySpaces = String.join("", Collections.nCopies(indent * 2, " "));
- builder.append(emptySpaces).append(this.value).append("\n");
- for (Tree<T> child : this.children) {
- child.print(indent+1, builder);
- }
- return builder.toString();
- }
- public void each(Consumer<T> consumer) {
- consumer.accept(this.value);
- for (Tree<T> child : this.children) {
- child.each(consumer);
- }
- }
- public Iterable<T> orderDFS() {
- List<T> result = new ArrayList<>();
- deepFirstTraversal(this, result);
- return result;
- }
- private void deepFirstTraversal(Tree<T> tree, List<T> result) {
- for (Tree<T> child : tree.children) {
- this.deepFirstTraversal(child,result);
- }
- result.add(tree.value);
- }
- public Iterable<T> orderBFS() {
- List<T> result = new ArrayList<>();
- Queue<Tree<T>> queue = new ArrayDeque<>();
- queue.offer(this);
- while (queue.size() > 0){
- Tree<T> current = queue.poll();
- result.add(current.value);
- for (Tree<T> child : current.children) {
- queue.offer(child);
- }
- }
- return result;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement