Implement breadth-first and (pre-order) depth-first traversal.
Create a simple test case in main
👀 Solution
public static void main(String[] arguments) {
// 0
// / | \
// 1 2 3
// / \
// 4 5
// |
// 6
Tree tree = new Tree();
tree.root = new Node(0);
tree.root.children.add(new Node(1));
tree.root.children.add(new Node(2));
tree.root.children.add(new Node(3));
tree.root.children.get(0).children.add(new Node(4));
tree.root.children.get(0).children.add(new Node(5));
tree.root.children.get(0).children.get(0).children.add(new Node(6));
PRINT(tree.traverseBreadthFirst()); // [0 1 2 3 4 5 6]
PRINT(tree.traversePreOrderDepthFirst()); // [0 1 4 6 5 2 3]
}
👀 Alternate Solution
public static void main(String[] arguments) {
Tree tree; {
Node node0 = new Node(0);
Node node1 = new Node(1);
Node node2 = new Node(2);
Node node3 = new Node(3);
Node node4 = new Node(4);
Node node5 = new Node(5);
Node node6 = new Node(6);
node0.children.add(node1);
node0.children.add(node2);
node0.children.add(node3);
node1.children.add(node4);
node1.children.add(node5);
node4.children.add(node6);
Tree tree = new Tree();
tree.root = node0;
}
PRINT(tree.traverseBreadthFirst()); // [0 1 2 3 4 5 6]
PRINT(tree.traversePreOrderDepthFirst()); // [0 1 4 6 5 2 3]
}
Implement traverseBreadthFirst
👀 Solution
ArrayList<Node> traverseBreadthFirst() {
ArrayList<Node> result = new ArrayList<>();
ArrayDeque<Node> queue = new ArrayDeque<>();
queue.add(root);
while (queue.size() != 0) {
Node curr = queue.remove();
result.add(curr);
for (Node child : curr.children) {
queue.add(child);
}
}
return result;
}
Implement traversePreOrderDepthFirst
👀 Solution
ArrayList<Node> traversePreOrderDepthFirst() {
ArrayList<Node> result = new ArrayList<>();
_traversePreOrderDepthFirstHelper(root, result);
return result;
}
void _traversePreOrderDepthFirstHelper(Node curr, ArrayList<Node> result) {
result.add(curr);
for (Node child : curr.children) {
_traversePreOrderDepthFirstHelper(child, result);
}
}
import java.util.*;
class Tut09 extends Cow {
static class Tree {
Node root;
// HINT: A queue (ArrayDeque from Docs) will be helpful.
ArrayList<Node> traverseBreadthFirst() {
ArrayList<Node> result = new ArrayList<>();
// TODO
return result;
}
// HINT: Recursion will be helpful.
ArrayList<Node> traversePreOrderDepthFirst() {
ArrayList<Node> result = new ArrayList<>();
_traversePreOrderDepthFirstHelper(root, result);
return result;
}
void _traversePreOrderDepthFirstHelper(Node curr, ArrayList<Node> result) {
// TODO
}
}
static class Node {
int value;
ArrayList<Node> children;
Node(int value) {
this.value = value;
this.children = new ArrayList<>();
}
public String toString() {
return "" + value;
}
}
public static void main(String[] arguments) {
// 0
// / | \
// 1 2 3
// / \
// 4 5
// |
// 6
Tree tree = new Tree();
tree.root = new Node(0);
// TODO: Set up tree to match the picture above.
// NOTE: root.children should be [1, 2, 3] (same order left-to-right)
PRINT(tree.traverseBreadthFirst()); // [0 1 2 3 4 5 6]
PRINT(tree.traversePreOrderDepthFirst()); // [0 1 4 6 5 2 3]
}
}