Advertisement
didatzi

Tree

Jan 18th, 2018
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.62 KB | None | 0 0
  1. import java.util.*;
  2. import java.util.function.Consumer;
  3.  
  4. public class Tree<T> {
  5.     private T value;
  6.     private Tree<T>[] children;
  7.  
  8.     public Tree(T value, Tree<T>... children) {
  9.         this.value = value;
  10.         this.children = children;
  11.     }
  12.  
  13.     // append output to builder
  14.     public String print(int indent, StringBuilder builder) {
  15.         String emptySpaces  = String.join("", Collections.nCopies(indent * 2, " "));
  16.  
  17.         builder.append(emptySpaces).append(this.value).append("\n");
  18.         for (Tree<T> child : this.children) {
  19.             child.print(indent+1, builder);
  20.         }
  21.         return builder.toString();
  22.     }
  23.  
  24.     public void each(Consumer<T> consumer) {
  25.         consumer.accept(this.value);
  26.         for (Tree<T> child : this.children) {
  27.             child.each(consumer);
  28.         }
  29.     }
  30.  
  31.     public Iterable<T> orderDFS() {
  32.         List<T> result = new ArrayList<>();
  33.         deepFirstTraversal(this, result);
  34.         return result;
  35.     }
  36.  
  37.     private void deepFirstTraversal(Tree<T> tree, List<T> result) {
  38.         for (Tree<T> child : tree.children) {
  39.             this.deepFirstTraversal(child,result);
  40.         }
  41.         result.add(tree.value);
  42.     }
  43.  
  44.     public Iterable<T> orderBFS() {
  45.         List<T> result = new ArrayList<>();
  46.         Queue<Tree<T>> queue = new ArrayDeque<>();
  47.         queue.offer(this);
  48.         while (queue.size() > 0){
  49.            Tree<T> current = queue.poll();
  50.            result.add(current.value);
  51.  
  52.             for (Tree<T> child : current.children) {
  53.                 queue.offer(child);
  54.             }
  55.         }
  56.         return result;
  57.     }
  58.  
  59. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement