我必须实现模板类Tree(BST)。我的想法是创建一个在类Tree中定义Node指针的Node Struct。 我试图实现insert()方法,但似乎无法正常工作。 这个概念是在没有其他元素的情况下,向根中插入一个新元素,否则,如果它比根大或小,则将其插入到右或左节点中。
#include <iostream>
#include <fstream>
using namespace std;
template <typename T> struct Node
{
T key;
Node <T> * Right;
Node <T> * Left;
Node <T> * Parent;
};
class NonCopyable
{
protected:
NonCopyable() {}
private:
NonCopyable(const NonCopyable&) = delete;
NonCopyable& operator =(const NonCopyable&) = delete;
};
template <typename T> class Tree: public NonCopyable
{
private:
public:
Node <T> * Root;
Tree(){
Root=nullptr;
};
~Tree(){
delete Root;
}
void Insert(Node<T> * node, T key);
void Print_In_Order(Node<T> * Root);
};
template <typename T> void Tree<T>::Insert(Node <T> * node, T key){
if(node==nullptr) {
Node<T> * New_Node;
New_Node->key=key;
New_Node->Right=nullptr;
New_Node->Left=nullptr;
New_Node->Parent=Root;
}
else if(key> Root->key) Insert(Root->Right, key);
else if(key< Root->key) Insert(Root->Left, key);
}
template <typename T> void Tree<T>::Print_In_Order(Node<T> * Root){
if(Root==nullptr) return;
Print_In_Order(Root->Left);
cout<< Root->key<<endl;
Print_In_Order(Root->Right);
}
int main(){
Tree<int> A;
A.Insert(A.Root,10);
A.Insert(A.Root,11);
A.Insert(A.Root,56);
A.Print_In_Order(A.Root);
}