public Iterable<Key> levelOrderTraversal() {
        Queue<Key> q = new LinkedList<Key>();

        if (root == null)
            return q;

        Queue<Node> tempQ = new LinkedList<Node>();
        Node n = root;
        tempQ.add(n);

        while (!tempQ.isEmpty()) {
            n = tempQ.poll();
            q.add(n.key);
            if (n.left != null)
                tempQ.add(n.left);
            if (n.right != null)
                tempQ.add(n.right);
        }
        return q;
    }