[数据结构]10.4实现avl Tree的插入和删除操作。
来源:互联网 发布:跑步计时器软件 编辑:程序博客网 时间:2024/06/04 19:30
//**********************************************************插入函数****************************************************template<class Record>Error_code AVL_tree<Record>::insert(const Record & new_data){bool taller;return avl_insert(root, new_data, taller);}template<class Record>Error_code AVL_tree<Record>::avl_insert(Binary_node<Record>*& sub_root, const Record & new_data, bool & taller){if (sub_root == NULL) {sub_root = new AVL_node<Record>(new_data);taller = true;return success;}else if (sub_root->data == new_data) {taller = false;return duplicate_error;}else if (sub_root->data > new_data) {Error_code result = avl_insert(sub_root->left_child, new_data, taller);if (taller == true) {switch (sub_root->get_balance()){case left_higher:left_balance(sub_root);taller = false;break;case equal_height:sub_root->set_balance(left_higher);break;case right_higher:sub_root->set_balance(equal_height);taller = false;break;}}return result;}else {Error_code result = avl_insert(sub_root->right_child, new_data, taller);if (taller == true) {switch (sub_root->get_balance()){case left_higher:sub_root->set_balance(equal_height);taller = false;break;case equal_height:sub_root->set_balance(right_higher);break;case right_higher:right_balance(sub_root);taller = false;break;}}return result;}}//*******************************************************************删除函数********************************************************template<class Record>Error_code AVL_tree<Record>::remove(Record & old_data){bool shorter = true;return avl_remove(root, old_data, shorter);}template<class Record>Error_code AVL_tree<Record>::avl_remove(Binary_node<Record>*& sub_root, Record & new_data, bool & shorter){Error_code result;if (sub_root == NULL) {shorter = false;return not_present;}else if (new_data == sub_root->data) {Binary_node<Record>*to_delete = sub_root;if (sub_root->right_child == NULL) {sub_root = sub_root->left_child;shorter = true;delete to_delete;return success;}else if (sub_root->left_child == NULL) {sub_root = sub_root->right_child;shorter = true;delete to_delete;return success;}else {to_delete = sub_root->left_child;Binary_node<Record> *parent = sub_root;while (!to_delete->right_child) {parent = to_delete;to_delete = to_delete->left_child;}sub_root->data = to_delete->data;new_data = to_delete->data; delete to_delete;}}if (new_data < sub_root->data) {result = avl_remove(sub_root->left_child, new_data, shorter);if (shorter == true) {switch (sub_root->get_balance()){case left_higher:sub_root->set_balance(equal_height);break;case equal_height:sub_root->set_balance(right_higher);break;case right_higher:shorter = right_balance2(sub_root);break;}}}if (new_data > sub_root->data) {result = avl_remove(sub_root->right_child, new_data, shorter);if (shorter == true) {switch (sub_root->get_balance()){case left_higher:shorter=left_balance2(sub_root);break;case equal_height:break;sub_root->set_balance(left_higher);case right_higher:sub_root->set_balance(equal_height);break;}}}return result;}
0 0
- [数据结构]10.4实现avl Tree的插入和删除操作。
- avl tree的插入删除操作代码
- 数据结构-----AVL树的插入删除操作
- AVL的插入,删除操作
- avl树的插入操作和删除操作
- AVL树的插入_删除操作实现~
- 二叉平衡树AVL插入删除操作的实现
- 支持泛型AVL Tree的简单实现,并和STL map比较了插入,删除,查找的性能
- 支持泛型AVL Tree的简单实现,并和STL map比较了插入,删除,查找的性能
- AVL树的旋转,插入,删除操作
- AVL树的插入删除操作
- AVL树的插入与删除操作
- AVL树的插入、删除、查找操作
- AVL树的插入删除操作
- 【数据结构】AVL树的旋转和插入
- AVL Tree 平衡二叉树基本插入删除节点功能的实现
- AVL Tree 平衡二叉树基本插入删除节点功能的实现 .
- AVL树的插入和删除
- [数据结构]10.2实现binary search tree的查找和插入操作,用非递归的方法实现
- JavaScript学习--Item31 值得你挑战的JavaScript面试题(45题)
- Mysql 存储引擎中InnoDB与Myisam的主要区别
- 记录传 self 给 c++ 代码时计数器加 1 的 bug
- HDU 2516取石子游戏(巴什博弈)
- [数据结构]10.4实现avl Tree的插入和删除操作。
- 初学单例模式
- 说说mvc模式的原理,它在android中的运用
- 6-7 8255 控制交通灯
- 【java进阶】初探泛型
- hbase1.1.3 启动一
- CodeForces 671A Recycling Bottles
- Leetcode 43. Multiply Strings
- 三种页面置换算法C实现