10template<
typename ElementType>
15 enum class visit_mode:
int{ pre_order, in_order, ascending_order = in_order, post_order, descending_order };
28 m_value{value}, m_parent{parent} { }
34 if(value == this->m_value)
36 else if(value < this->m_value)
40 return this->m_left->insert(value);
51 return this->m_right->insert(value);
69 os << this->m_value <<
nl;
72 this->m_left->visit_nodes(os, order);
75 this->m_right->visit_nodes(os, order);
82 this->m_left->visit_nodes(os, order);
85 this->m_right->visit_nodes(os, order);
87 os << this->m_value <<
nl;
95 this->m_right->visit_nodes(os, order);
97 os << this->m_value <<
nl;
100 this->m_left->visit_nodes(os, order);
109 this->m_left->visit_nodes(os, order);
111 os << this->m_value <<
nl;
114 this->m_right->visit_nodes(os, order);
145 std::stringstream os;
147 root.visit_nodes(os, visit_mode::pre_order);
152 root.visit_nodes(os, visit_mode::in_order);
157 root.visit_nodes(os, visit_mode::post_order);
184 std::stringstream os;
186 root.visit_nodes(os, visit_mode::ascending_order);
191 root.visit_nodes(os, visit_mode::descending_order);
void test_ascending_descending_order()
typename binary_node< ElementType >::node_ptr_t node_ptr_t
typename graph_t::visit_mode visit_mode
void visit_nodes(std::stringstream &os, visit_mode order=visit_mode::in_order)
std::unique_ptr< binary_node > node_ptr_t
bool insert(ElementType value)
binary_node(ElementType value=ElementType{}, binary_node *parent=nullptr)
Stream output operators << are implemented.