public void bfs() {
    // BFS uses Queue data structure

    Queue<Integer> q = new LinkedList<Integer>();

    q.add(rootNode);
    visited[rootNode] = true;

    printNode(rootNode);

    while (!q.isEmpty()) {
      int n, child;

      n = (q.peek()).intValue();

      child = getUnvisitedChildNode(n);

      if (child != -1) {
        visited[child] = true;

        printNode(child);

        q.add(child);
      } else {
        q.remove();
      }
    }

    clearVisited(); // Clear visited property of nodes
  }