当前位置: 首页 > news >正文

26 avl树(下)

#define _CRT_SECURE_NO_WARNINGS 1 #include<vector> #include"AVLTree.h" void TestAVLTree1() { AVLTree<int, int> t; // 常规的测试用例 int a[] = { 16, 3, 7, 11, 9, 26, 18, 14, 15 }; // 特殊的带有双旋场景的测试用例 //int a[] = { 4, 2, 6, 1, 3, 5, 15, 7, 16, 14 }; for (auto e : a) { t.Insert({ e, e }); } t.InOrder(); } int main() { TestAVLTree2(); return 0; }

中序没毛病

怎么检查是不是avl树

这也要套一层

就没问题。

插入logN 很快,

void InOrder() { _InOrder(_root); cout << endl; } int Height() { return _Height(_root); } int Size() { return _Size(_root); } bool IsBalanceTree() { return _IsBalanceTree(_root); } Node* Find(const K& key) { Node* cur = _root; while (cur) { if (cur->_kv.first < key) { cur = cur->_right; } else if (cur->_kv.first > key) { cur = cur->_left; } else { return cur; } } return nullptr; } private: void _InOrder(Node* root) { if (root == nullptr) { return; } _InOrder(root->_left); cout << root->_kv.first << ":" << root->_kv.second << endl; _InOrder(root->_right); } int _Height(Node* root) { if (root == nullptr) return 0; int leftHeight = _Height(root->_left); int rightHeight = _Height(root->_right); return leftHeight > rightHeight ? leftHeight + 1 : rightHeight + 1; } int _Size(Node* root) { if (root == nullptr) return 0; return _Size(root->_left) + _Size(root->_right) + 1; } bool _IsBalanceTree(Node* root) { // 空树也是AVL树 if (nullptr == root) return true; // 计算pRoot结点的平衡因子:即pRoot左右子树的高度差 int leftHeight = _Height(root->_left); int rightHeight = _Height(root->_right); int diff = rightHeight - leftHeight; // 如果计算出的平衡因子与pRoot的平衡因子不相等,或者 // pRoot平衡因子的绝对值超过1,则一定不是AVL树 if (abs(diff) >= 2) { cout << root->_kv.first << "高度差异常" << endl; return false; } if (root->_bf != diff) { cout << root->_kv.first << "平衡因子异常" << endl; return false; } // pRoot的左和右如果都是AVL树,则该树一定是AVL树 return _IsBalanceTree(root->_left) && _IsBalanceTree(root->_right); } private: Node* _root = nullptr; };

删除节点一定是左为空或者右为空,

现在是0.说明之前是1或者-1,就要往上更新

变成1 -1 不用更新,高度不变,再删10 ,就要旋转了,

http://www.jsqmd.com/news/79121/

相关文章:

  • 从“写代码”到“定义问题”——AI 时代程序员的生存宣言
  • 音元系统:目录
  • 最全词典整合收录:打造专业英语学习利器
  • Java毕业设计不会做怎么办?
  • 基于深度学习的文物图像修复系统
  • 零基础理解k8s - 实践
  • Java毕业设计做不出来可以找代做吗?
  • 连接2026:十款远程控制软件真实力横评与选择指南
  • openvela——动态管理日志输出通道及其实现原理
  • JavaScript 引擎中的分支预测器(Branch Predictor)友好性:如何写出减少 CPU 误判的代码
  • Draco 3D压缩终极指南:如何高效处理大型3D模型文件
  • 可以把 Windows 从 C盘迁移到 SSD 吗?
  • Overleaf插件定制实战指南:3分钟搞定编辑器功能优化
  • Day 37 - 早停策略与模型权重的保存
  • 15、Linux 系统下的邮件与即时通讯使用指南
  • JavaScript 的数值计算精度:Kahan 求和算法在处理大量浮点数累加时的应用
  • 为什么 C盘空间会莫名其妙减少(即使没装新软件)?
  • 微信遥控Mac:WeChatPlugin远程控制终极指南
  • 16、探索 Linux:网络应用与文件管理指南
  • 【SOVD】软件定义汽车时代的诊断新范式
  • javet 的使用
  • 用户目录能不能放到其他盘?
  • 数据分析工具对比:SPSS vs Tableau vs DataEase
  • 【OTA】自动化测试方案
  • 哪些文件夹里的文件是可以安全删除的?比如Temp、Download这些?
  • C盘哪些文件可以删除?
  • 10款最佳开源Android个性化应用:让你的手机桌面焕然一新
  • cmark Markdown解析器终极指南:从入门到精通
  • 我的文档、桌面、下载这些文件夹都在C盘,怎么把它们整个移到D盘?
  • 18、深入了解 Linux 文件系统:导航与分区指南