10 std::stack<const Node<T> *>
s;
26 std::stack<const Node<T> *>
s;
28 while (
curr || !
s.empty())
46 std::stack<const Node<T> *>
s;
49 while (!
s.empty() ||
curr)
75 std::queue<const Node<T> *>
q;
94 std::queue<const Node<T> *>
q;
112 p_head = std::make_unique<Node<T>>(*
other.p_head);
119 p_head =
other.p_head ? std::make_unique<Node<T>>(*
other.p_head) :
nullptr;
130 p_head = std::move(
root);
135 return p_head ==
nullptr;
140 return compute_size(p_head.get());
169 preorder(p_head.get());
170 std::cout << std::endl;
174 inorder(p_head.get());
175 std::cout << std::endl;
179 postorder(p_head.get());
180 std::cout << std::endl;
184 levelorder(p_head.get());
185 std::cout << std::endl;
190 return std::make_unique<Node<T>>(
val);
196 return std::make_unique<Node<T>>(
val, std::move(
l), std::move(
r));
static std::unique_ptr< Node< T > > make_node(const T &val)
int compute_size(const Node< T > *node) const
void print_levelorder() const
void postorder(const Node< T > *node) const
void set_left(Node< T > *parent, std::unique_ptr< Node< T > > left_child)
void print_preorder() const
void set_root(std::unique_ptr< Node< T > > root)
Node< T > * get_root() const
void inorder(const Node< T > *node) const
void preorder(const Node< T > *node) const
void print_inorder() const
void set_right(Node< T > *parent, std::unique_ptr< Node< T > > right_child)
void levelorder(const Node< T > *node) const
BinaryTree & operator=(const BinaryTree &other)
void print_postorder() const
int get_height_val() const
void set_left(std::unique_ptr< Node< T > > node)
const T & get_data() const
Node< T > * get_right() const
void set_right(std::unique_ptr< Node< T > > node)
Node< T > * get_left() const
void set_height_val(int h)