Tut09 - james-bern/CS136 GitHub Wiki

image

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);
    }
}

Starter Code

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]
	}

} 
⚠️ **GitHub.com Fallback** ⚠️