模板类树

时间:2019-07-13 16:35:04

标签: c++ class templates visual-studio-code binary-search-tree

我必须实现模板类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);
}

0 个答案:

没有答案