use crate::graph::builders::GraphBuilder;
use crate::graph::Graph;
pub fn tree_graph<T>(n: usize) -> Graph<T, f64>
where
T: Clone + Default,
{
if n == 0 {
return Graph::undirected();
}
let mut builder = GraphBuilder::undirected().with_nodes((0..n).map(|_| T::default()));
for i in 0..n - 1 {
builder = builder.with_edge(i, i + 1, 1.0);
}
builder.build().unwrap_or_else(|_| Graph::undirected())
}
pub fn binary_tree_graph<T>(height: usize) -> Graph<T, f64>
where
T: Clone + Default,
{
let n = (1 << height) - 1; let mut builder = GraphBuilder::undirected().with_nodes((0..n).map(|_| T::default()));
for i in 0..n {
let left = 2 * i + 1;
let right = 2 * i + 2;
if left < n {
builder = builder.with_edge(i, left, 1.0);
}
if right < n {
builder = builder.with_edge(i, right, 1.0);
}
}
builder.build().unwrap_or_else(|_| Graph::undirected())
}