Struct Node

Source
pub struct Node<T> { /* private fields */ }
Expand description

A tree node

Implementations§

Source§

impl<T> Node<T>

Source

pub fn new(data: T) -> Self

Create a Node

Examples found in repository?
examples/hello.rs (line 24)
22fn main() {
23
24    let mut root = HellNode::new(NodeData::new(0, format!("root")));
25
26    root.data().print();
27
28    let mut level1_0 = HellNode::new(NodeData::new(1, format!("level1_0")));
29    let mut level1_1 = HellNode::new(NodeData::new(2, format!("level1_1")));
30
31    let level2_0_0 = HellNode::new(NodeData::new(3, format!("level2_0_0")));
32    let level2_0_1 = HellNode::new(NodeData::new(4, format!("level2_0_1")));
33
34    level1_0.add(level2_0_0);
35    level1_0.add(level2_0_1);
36
37    let level2_1_0 = HellNode::new(NodeData::new(3, format!("level2_1_0")));
38
39    
40    level1_1.add(level2_1_0);
41
42    root.add(level1_0);
43    root.add(level1_1);
44
45    root.deepth_first_search(|nd| nd.print());
46
47    root.breadth_first_search(|nd| nd.print());
48}
Source

pub fn add(&mut self, node: Node<T>)

Add a node to self

Examples found in repository?
examples/hello.rs (line 34)
22fn main() {
23
24    let mut root = HellNode::new(NodeData::new(0, format!("root")));
25
26    root.data().print();
27
28    let mut level1_0 = HellNode::new(NodeData::new(1, format!("level1_0")));
29    let mut level1_1 = HellNode::new(NodeData::new(2, format!("level1_1")));
30
31    let level2_0_0 = HellNode::new(NodeData::new(3, format!("level2_0_0")));
32    let level2_0_1 = HellNode::new(NodeData::new(4, format!("level2_0_1")));
33
34    level1_0.add(level2_0_0);
35    level1_0.add(level2_0_1);
36
37    let level2_1_0 = HellNode::new(NodeData::new(3, format!("level2_1_0")));
38
39    
40    level1_1.add(level2_1_0);
41
42    root.add(level1_0);
43    root.add(level1_1);
44
45    root.deepth_first_search(|nd| nd.print());
46
47    root.breadth_first_search(|nd| nd.print());
48}
Source

pub fn data_mut(&mut self) -> &mut T

Get mut data

Source

pub fn data(&self) -> &T

Get data

Examples found in repository?
examples/hello.rs (line 26)
22fn main() {
23
24    let mut root = HellNode::new(NodeData::new(0, format!("root")));
25
26    root.data().print();
27
28    let mut level1_0 = HellNode::new(NodeData::new(1, format!("level1_0")));
29    let mut level1_1 = HellNode::new(NodeData::new(2, format!("level1_1")));
30
31    let level2_0_0 = HellNode::new(NodeData::new(3, format!("level2_0_0")));
32    let level2_0_1 = HellNode::new(NodeData::new(4, format!("level2_0_1")));
33
34    level1_0.add(level2_0_0);
35    level1_0.add(level2_0_1);
36
37    let level2_1_0 = HellNode::new(NodeData::new(3, format!("level2_1_0")));
38
39    
40    level1_1.add(level2_1_0);
41
42    root.add(level1_0);
43    root.add(level1_1);
44
45    root.deepth_first_search(|nd| nd.print());
46
47    root.breadth_first_search(|nd| nd.print());
48}
Source

pub fn child(&self, index: usize) -> Option<&Node<T>>

Get child by index

Source

pub fn last_child(&self) -> Option<&Node<T>>

Get last child

Source

pub fn child_mut(&mut self, index: usize) -> Option<&mut Node<T>>

Get mut child by index

Source

pub fn last_child_mut(&mut self) -> Option<&mut Node<T>>

Get last mut child

Source

pub fn children(&self) -> &Vec<Node<T>>

Get children

Source

pub fn children_mut(&mut self) -> &mut Vec<Node<T>>

Get mut children

Source

pub fn child_by_path(&self, path: &Vec<usize>) -> Option<&Node<T>>

Get child by a vec path path: [0, 1, 3]

Source

pub fn child_mut_by_path(&mut self, path: &Vec<usize>) -> Option<&mut Node<T>>

Get mut child by a vec path path: [0, 1, 3]

Source

pub fn last_child_by_level(&self, level: usize) -> Option<&Node<T>>

get right child by deepth

Source

pub fn last_child_mut_by_level(&mut self, level: usize) -> Option<&mut Node<T>>

get right mut child by deepth

Deepth first traversal (Preorder) of a tree

Examples found in repository?
examples/hello.rs (line 45)
22fn main() {
23
24    let mut root = HellNode::new(NodeData::new(0, format!("root")));
25
26    root.data().print();
27
28    let mut level1_0 = HellNode::new(NodeData::new(1, format!("level1_0")));
29    let mut level1_1 = HellNode::new(NodeData::new(2, format!("level1_1")));
30
31    let level2_0_0 = HellNode::new(NodeData::new(3, format!("level2_0_0")));
32    let level2_0_1 = HellNode::new(NodeData::new(4, format!("level2_0_1")));
33
34    level1_0.add(level2_0_0);
35    level1_0.add(level2_0_1);
36
37    let level2_1_0 = HellNode::new(NodeData::new(3, format!("level2_1_0")));
38
39    
40    level1_1.add(level2_1_0);
41
42    root.add(level1_0);
43    root.add(level1_1);
44
45    root.deepth_first_search(|nd| nd.print());
46
47    root.breadth_first_search(|nd| nd.print());
48}

Breadth first traversal (Level Order) of a tree

Examples found in repository?
examples/hello.rs (line 47)
22fn main() {
23
24    let mut root = HellNode::new(NodeData::new(0, format!("root")));
25
26    root.data().print();
27
28    let mut level1_0 = HellNode::new(NodeData::new(1, format!("level1_0")));
29    let mut level1_1 = HellNode::new(NodeData::new(2, format!("level1_1")));
30
31    let level2_0_0 = HellNode::new(NodeData::new(3, format!("level2_0_0")));
32    let level2_0_1 = HellNode::new(NodeData::new(4, format!("level2_0_1")));
33
34    level1_0.add(level2_0_0);
35    level1_0.add(level2_0_1);
36
37    let level2_1_0 = HellNode::new(NodeData::new(3, format!("level2_1_0")));
38
39    
40    level1_1.add(level2_1_0);
41
42    root.add(level1_0);
43    root.add(level1_1);
44
45    root.deepth_first_search(|nd| nd.print());
46
47    root.breadth_first_search(|nd| nd.print());
48}

Auto Trait Implementations§

§

impl<T> Freeze for Node<T>
where T: Freeze,

§

impl<T> RefUnwindSafe for Node<T>
where T: RefUnwindSafe,

§

impl<T> Send for Node<T>
where T: Send,

§

impl<T> Sync for Node<T>
where T: Sync,

§

impl<T> Unpin for Node<T>
where T: Unpin,

§

impl<T> UnwindSafe for Node<T>
where T: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.