Witam. Zaczynam naukę biblioteki <memory> (korzystam z strony cppreference.com). Na początek chciałem stworzyć sobie takie podstawowe drzewo binarne z wykorzystaniem shared_ptr. Jednak metoda prnt() nie wyświetla prawidłowo kluczy węzłów. Oto kod:
#ifndef BTree
#define BTree
#include<memory>
#include<iostream>
using namespace std;
template<class T>
class Node {
template<class T> friend class BTree;
typedef shared_ptr<Node<T>> N_ptr;
friend int main();
private:
N_ptr left, right;
T key;
Node(const T&, N_ptr = nullptr, N_ptr = nullptr);
Node();
};
template<class T>
class BTree{
typedef shared_ptr<Node<T>> N_ptr;
friend int main();
public:
BTree();
void insrt(const T&);
void prnt();
private:
void srch(const T&, N_ptr&);
N_ptr root;
void prnt(N_ptr);
};
#endif // !BTree
template<class T>
Node<T>::Node(const T& nKey, N_ptr nLeft, N_ptr nRight) : key{ nKey }, left{ nLeft },
right{ nRight } {}
template<class T>
Node<T>::Node() :left{ nullptr },right{ nullptr } {}
template<class T>
BTree<T>::BTree() : root{ nullptr }{}
template<class T>
void BTree<T>::srch(const T& nKey,N_ptr& prev) {
if (root != nullptr) {
N_ptr ptr = root;
while (ptr != nullptr) {
prev = ptr;
if (nKey > ptr->key)
ptr = ptr->right;
else ptr = ptr->left;
}
}
}
template<class T>
void BTree<T>::insrt(const T& nKey) {
N_ptr newNode(new Node<T>(nKey));
if (root == nullptr)
root.swap(newNode);
else {
N_ptr prsnt = nullptr;
srch(nKey,prsnt);
cout << prsnt->key << endl;
if (nKey > prsnt->key)
prsnt->right.swap(newNode);
else prsnt->left.swap(newNode);
}
}
template<class T>
void BTree<T>::prnt() {
prnt(root);
}
template<class T>
void BTree<T>::prnt(N_ptr node) {
if (node != nullptr) {
prnt(node->left);
cout << node->key << endl;
prnt(node->right);
}
}
Wejście( int main() ):
BTree<int> tree;
tree.insrt(5);
tree.insrt(6);
tree.insrt(4);
tree.prnt();
Wyjście:
5
5
4
5
6
Ktoś ma pomysł co zepsułem ? Z góry dziękuję