news 2026/10/9 9:09:54

26 avl树(下)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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 ,就要旋转了,

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/9 8:04:56

V助手舆情分析智能体:重塑舆情分析,从“人找信息”到“信息为人”

V助手舆情分析智能体&#xff1a;重塑舆情分析&#xff0c;从“人找信息”到“信息为人”在信息爆炸的时代&#xff0c;舆情分析工作常常面临数据繁杂、流程冗长、响应迟缓等挑战。传统方式不仅耗时耗力&#xff0c;更易错失关键信息与应对先机。如今&#xff0c;随着蜜度V助手…

作者头像 李华
网站建设 2026/10/8 22:08:49

连接2026:十款远程控制软件真实力横评与选择指南

目录引&#x1f4c8; 选择前必读&#xff1a;明确你的核心需求&#x1f3c6; 综合王者&#xff1a;ToDesk&#xff08;评分 9.6/10&#xff09;&#x1f3af; 细分领域佼佼者&#x1f3ae; 为游戏而生&#xff1a;网易UU远程&#xff08;评分 8.4/10&#xff09;&#x1f3ac; …

作者头像 李华
网站建设 2026/10/7 19:53:45

计算机毕业设计springboot基于Spark++Vue.js的学生管理系统 Spark+Vue 高校学生综合信息管理平台 基于 SpringBoot+Spark+Vue 的全链路学生事务中心

计算机毕业设计springboot基于SparkVue.js的学生管理系统i2kn7p36 &#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。在“数据即资产”的校园时代&#xff0c;传统 Excel 与人工流转…

作者头像 李华
网站建设 2026/10/8 7:48:01

为什么 C盘空间会莫名其妙减少(即使没装新软件)?

为什么 C盘空间会莫名其妙减少&#xff08;即使没装新软件&#xff09;&#xff1f;你有没有注意到c盘空间在减少&#xff0c;即使你没有安装新程序, 这个常见问题可能让人担心, 但通常有明确原因, windows和其他软件会定期创建临时文件、系统备份和更新, 占用磁盘空间而不会每…

作者头像 李华
网站建设 2026/10/8 20:14:37

17、深入理解 Linux 文件系统机制与结构

深入理解 Linux 文件系统机制与结构 1. 理解长格式文件列表 在 Linux 中,使用 ls -la 命令可以查看详细的文件列表信息,示例输出如下: drwx------ 2 dee dee 4096 Jul 29 07:48 . drwxr-xr-x 5 root root 4096 Jul 27 11:57 .. -rw-r--r-- 1 dee dee 24 Jul 27 …

作者头像 李华