首页 > 代码库 > 二叉排序树(插入、删除、更新、遍历、搜索、求树高。。。)
二叉排序树(插入、删除、更新、遍历、搜索、求树高。。。)
#include <iostream> using namespace std; // 有序二叉树(二叉搜索树) class Tree { public: // 构造过程中初始化为空树 Tree (void) : m_root (NULL), m_size (0) {} // 析构过程中销毁剩余节点 ~Tree (void) { clear (); } // 插入数据 void insert (int data) { insert (new Node (data), m_root); ++m_size; } // 删除第一个匹配数据,不存在返回false bool erase (int data) { Node*& node = find (data, m_root); if (node) { // 左插右 insert (node->m_left, node->m_right); Node* temp = node; // 右提升 node = node->m_right; delete temp; --m_size; return true; } return false; } // 删除所有匹配数据 void remove (int data) { while (erase (data)); } // 清空树 void clear (void) { clear (m_root); m_size = 0; } // 将所有的_old替换为_new void update (int _old, int _new) { while (erase (_old)) insert (_new); } // 判断data是否存在 bool find (int data) { return find (data, m_root) != NULL; } // 中序遍历 void travel (void) { travel (m_root); cout << endl; } // 获取大小 size_t size (void) { return m_size; } // 获取树高 size_t height (void) { return height (m_root); } private: // 节点 class Node { public: Node (int data) : m_data (data), m_left (NULL), m_right (NULL) {} int m_data; // 数据 Node* m_left; // 左树 Node* m_right; // 右树 }; void insert (Node* node, Node*& tree) { if (! tree) tree = node; else if (node) { if (node->m_data < tree->m_data) insert (node, tree->m_left); else insert (node, tree->m_right); } } // 返回子树tree中值与data相匹配的节点的父节点中 // 指向该节点的成员变量的别名 Node*& find (int data, Node*& tree) { if (! tree) return tree; else if (data =http://www.mamicode.com/= tree->m_data)>二叉排序树(插入、删除、更新、遍历、搜索、求树高。。。)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。