Given an undirected graph as an adjacency list graph (where graph[u] lists the neighbors of u), return true if the graph is bipartite.
A graph is bipartite if its nodes can be split into two sets such that every edge connects a node in one set to a node in the other.