segtree 0.1.0

Segment tree implementation in rust
Documentation
use std::marker::PhantomData;
use std::ops::Add;

pub type NodePtr<T> = Option<Box<Node<T>>>;

/// Segment tree node.
#[derive(Clone)]
pub struct Node<T: Clone + Add + Into<T>> {
    pub l: NodePtr<T>,
    pub r: NodePtr<T>,
    pub val: T,
    __phantom: PhantomData<T>,
}

impl<T: Clone + Add<Output = T>> Node<T> {
    pub fn new(x: T) -> NodePtr<T> {
        return Some(Box::<Node<T>>::new(Node {
            l: None,
            r: None,
            val: x,
            __phantom: PhantomData,
        }));
    }
    pub fn merge(l: NodePtr<T>, r: NodePtr<T>, new_val: T) -> NodePtr<T> {
        return Some(Box::<Node<T>>::new(Node {
            l: l.clone(),
            r: r.clone(),
            val: new_val,
            __phantom: PhantomData,
        }));
    }
}