diff --git a/graphIsTreeOrNot b/graphIsTreeOrNot new file mode 100644 index 00000000000..313206f8fdc --- /dev/null +++ b/graphIsTreeOrNot @@ -0,0 +1,92 @@ +import java.io.*; +import java.util.*; + +class Graph +{ + private int V; + private LinkedList adj[]; + + + @SuppressWarnings("unchecked") + Graph(int v) + { + V = v; + adj = new LinkedList[V]; + for (int i=0; i(); + } + + void addEdge(int v,int w) + { + adj[v].add(w); + adj[w].add(v); + } + + boolean isCyclicUtil(int v, boolean visited[], int parent) + { + // Mark the current node as visited + visited[v] = true; + Integer i; + + Iterator it = adj[v].iterator(); + while (it.hasNext()) + { + i = it.next(); + + if (!visited[i]) + { + if (isCyclicUtil(i, visited, v)) + return true; + } + + else if (i != parent) + return true; + } + return false; + } + + // Returns true if the graph is a tree, else false. + boolean isTree() + { + + boolean visited[] = new boolean[V]; + for (int i = 0; i < V; i++) + visited[i] = false; + if (isCyclicUtil(0, visited, -1)) + return false; + + for (int u = 0; u < V; u++) + if (!visited[u]) + return false; + + return true; + } + + public static void main(String args[]) + { + // Create a graph given in the above diagram + Graph g1 = new Graph(5); + g1.addEdge(1, 0); + g1.addEdge(0, 2); + g1.addEdge(0, 3); + g1.addEdge(3, 4); + if (g1.isTree()) + System.out.println("Graph is Tree"); + else + System.out.println("Graph is not Tree"); + + Graph g2 = new Graph(5); + g2.addEdge(1, 0); + g2.addEdge(0, 2); + g2.addEdge(2, 1); + g2.addEdge(0, 3); + g2.addEdge(3, 4); + + if (g2.isTree()) + System.out.println("Graph is Tree"); + else + System.out.println("Graph is not Tree"); + + } +} +