二叉查找树的c++实现
来源:互联网 发布:阿里云解析的别名在哪 编辑:程序博客网 时间:2024/05/20 02:24
学习数据结构与算法分析加深记忆写的, 代码写的不太好 见谅..
template <class T>class bst_data{public:bst_data(){}~bst_data(){}bst_data<T>*m_right = nullptr;bst_data<T>*m_left = nullptr;T*m_value = nullptr;};template <class T>class binary_search_tree{public:binary_search_tree(){}~binary_search_tree(){}bst_data<T>*get_root() { return m_root_node; }bst_data<T>*create_node(){bst_data<T> * node = new bst_data<T>;node->m_value = new T;++m_size;return node;}voiddelete_node(bst_data<T> * node){if (node){delete node->m_value;delete node;}--m_size; }bst_data<T>*create_tree(const T & value){m_root_node = create_node();*m_root_node->m_value = value;return m_root_node;}bst_data<T>*clear(bst_data<T>*node){if (node == nullptr)return nullptr;node->m_left = clear(node->m_left);node->m_right= clear(node->m_right); delete_node(node);node = nullptr;return nullptr;}size_tsize(){return m_size;} public:T*find_min(bst_data<T> * node =nullptr){node = node == nullptr ? m_root_node : node;return find_min_ex(node)->m_value;}T*find_max(bst_data<T> * node =nullptr){node = node == nullptr ? m_root_node : node;return find_max_ex(node)->m_value;}T*find(const T &value, bst_data<T>* node ){if (node == nullptr)return nullptr;if (value > *node->m_value)return find(value,node->m_right);return value<*node->m_value ? find(value, node->m_left) : node->m_value;}bst_data<T>*insert(const T &value, bst_data<T> * node ){if (node == nullptr){auto element = create_node();*element->m_value = value;return element;}if (value > *node->m_value)node->m_right = insert(value, node->m_right);else if (value < *node->m_value)node->m_left = insert(value, node->m_left);elsereturn nullptr;return node;}bst_data<T>*remove(const T&value, bst_data<T>* node ){if (value > *node->m_value)node->m_right = remove(value, node->m_right);else if (value < *node->m_value)node->m_left = remove(value, node->m_left);else if (node->m_left &&node->m_right){bst_data<T>*temp = find_min_ex(node);Ttemp_value = *temp->m_value;*node->m_value = *temp->m_value;node->m_right = remove(temp_value, node->m_right);}else{bst_data<T>*temp = node;if (node->m_left == nullptr)node = node->m_right;else if (node->m_right == nullptr)node = node->m_left;delete_node(temp);}return node;} voidfor_each_element(bst_data<T>* node, std::function<void(T&)> func){if (node == nullptr)return;func(*node->m_value);for_each_element(node->m_left,func);for_each_element(node->m_right,func);}private:bst_data<T>*find_min_ex(bst_data<T> * node){return node->m_left == nullptr ? node : find_min_ex(node->m_left);}bst_data<T>*find_max_ex(bst_data<T> * node){return node->m_right == nullptr ? node : find_max_ex(node->m_right);}private:bst_data<T>*m_root_node;size_tm_size = 0;}; int main(){binary_search_tree<int> tree;tree.create_tree(1);tree.insert(0, tree.get_root());tree.insert(1, tree.get_root());tree.insert(2, tree.get_root());tree.insert(3, tree.get_root());cout << * tree.find_min() << endl;tree.for_each_element(tree.get_root(), [](int &v){cout << v << endl;}); return 0;}
阅读全文
0 0
- 二叉查找树的实现(using C)
- 二叉查找树的C语言实现
- 二叉查找树的实现(c++)
- 二叉查找树的C语言实现
- 二叉查找树的实现(C++)
- 【二叉查找树】c实现
- 二叉查找树(二叉排序树)的详细实现C版
- 基于c语言实现的二叉查找树
- 二叉查找树的C语言实现(一)
- 二叉查找树的C语言实现(二)
- 二叉查找树(一)之 C语言的实现
- 二叉查找树的基本实现-c语言
- 二叉查找树的简单实现(C语言版)
- 数据结构——二叉查找树的详细实现(c++)
- 详解二叉查找树算法的实现(c语言)
- C语言实现二叉查找树的输出
- 二叉查找树的实现
- 二叉查找树的实现
- 网络流征程——ISAP算法
- zepto知识点总结
- C#基础-017 简单练习-循环
- 2017/8/25 训练总结(最终版QAQ)
- linux上配置eclipse
- 二叉查找树的c++实现
- Linux编译内核执行make menuconfig或者make xconfig出错
- 二维数组案例
- ReactNative基础---State and Lifecycle
- 小随笔 SQL语句中的条件判断CASE
- php的public、protected、private三种访问控制模式的区别
- Linux tcpdump命令详解
- Linux计算md5sum(md5校验和) && 使用crypt和gpg加密/解密文件
- 在Linux上使用netstat命令查证DDOS攻击的方法