16 releases (9 breaking)

0.10.0 Jan 28, 2023
0.8.0 Jan 20, 2023

#1876 in Algorithms

37 downloads per month


875 lines

Binary Tree Builder

The library provides an IteratorEx trait that has a build_tree method for any iterator of nodes that implement the Node trait. The build_tree function returns the root node of the built tree if it was successfully built, otherwise it returns None if the provided iterator is empty.

Node Trait

The Node trait represents a node in a binary tree. It provides two methods for creating a new parent node from child nodes:

  • new_parent(self, right: Self) -> Self: creates a new parent node from two child nodes,
  • new_parent_from_one(self) -> Self: creates a new parent node from one child node.

The implementation of these methods is specific to the type of node being used, and should be provided by the user.


Building a binary tree from an iterator.


use bin_tree::{IteratorEx, Node};

#[derive(Clone, Default, PartialEq, Eq, Debug)]
struct NodeStr(String);

impl Node for NodeStr {
    fn new_parent(self, right: Self) -> Self {
        Self("[".to_owned() + &self.0 + ", " + &right.0 + "]")
    fn new_parent_from_single(self) -> Self {

let x = (0..10).map(|v| NodeStr(v.to_string())).build_tree();
assert_eq!(x, Some(NodeStr("[[[[0, 1], [2, 3]], [[4, 5], [6, 7]]], [8, 9]]".to_string())));