`is_forest()`

decides whether a graph is a forest, and optionally returns a
set of possible root vertices for its components.

## Usage

`is_forest(graph, mode = c("out", "in", "all", "total"), details = FALSE)`

## Arguments

- graph
An igraph graph object

- mode
Whether to consider edge directions in a directed graph. ‘all’ ignores edge directions; ‘out’ requires edges to be oriented outwards from the root, ‘in’ requires edges to be oriented towards the root.

- details
Whether to return only whether the graph is a tree (

`FALSE`

) or also a possible root (`TRUE`

)

## Value

When `details`

is `FALSE`

, a logical value that indicates
whether the graph is a tree. When `details`

is `TRUE`

, a named
list with two entries:

- res
Logical value that indicates whether the graph is a tree.

- root
The root vertex of the tree; undefined if the graph is not a tree.

## Details

An undirected graph is a forest if it has no cycles. In the directed case, a possible additional requirement is that edges in each tree are oriented away from the root (out-trees or arborescences) or all edges are oriented towards the root (in-trees or anti-arborescences). This test can be controlled using the mode parameter.

By convention, the null graph (i.e. the graph with no vertices) is considered to be a forest.

## See also

Other trees:
`is_tree()`

,
`make_from_prufer()`

,
`sample_spanning_tree()`

,
`to_prufer()`