二分搜尋樹元素的插入

ice_moss發表於2021-03-30
#include <iostream>

using namespace std;

//套用模板函式
template <typename Key, typename Value>
class BST{
private:
    //構造節點Node
    struct Node{
        Key key;
        Value value;
        Node *left;
        Node *right;

        Node(Key key, Value value){
            this->key = key;
            this->value = value;
            //初始值為空
            this->left = this->right = NULL;
        }
    };
    //根節點
    Node *root;
    //節點數量
    int count;

public:
    BST(){
        //初始值為空
        root = NULL;
        count = 0;
    }
    ~BST(){
        //TODO:~BST()
    }
    int size(){
        return count;
    }
    bool isEmpty(){
        return count == 0;
    }
    //插入操作
    void insert(Key key, Value value){
        //向根節點中插入key, value
        root= insert(root, key, value);
    }
private:
    //插入操作
    //向以node為根節點的二分搜尋樹中,插入節點(key,value),使用遞迴演算法
    //返回插入新節點後的二分搜尋樹的根
    Node* insert(Node *node, Key key, Value value){
        if(node == NULL){
            count ++;
            return new Node(key, value);
        }

        if(key == node->key){
            node->value = value;
        }

        else if(key > node->key){
            node->right = insert(node->right,key,value);
        }

        else //key < node->key
            node->left = insert(node->left, key, value);
    }

};
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章