news 2026/9/2 23:27:31

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/9/2 22:46:45

C盘哪些文件可以删除?

C盘哪些文件可以删除&#xff1f;c盘通常存放操作系统和许多用户文件&#xff0c;随着时间推移&#xff0c;它会被占满并使电脑变慢&#xff0c;在删除任何东西之前&#xff0c;你应该检查是什么占用了空间&#xff0c;备份重要文件&#xff0c;并了解哪些文件可以安全删除&…

作者头像 李华
网站建设 2026/9/2 18:19:35

openvela——动态管理日志输出通道及其实现原理

在《Vela rpmsg log 实现原理》中提到 vela 日志输出支持多通道日志输出&#xff0c;它们是在系统运行前期配置好的&#xff0c;所以无法将它们动态删除。但是可以控制使能、禁用某通道&#xff0c;达到相应通道输出、不输出日志的目的。接下来篇章将讲述”动态管理日志输出通道…

作者头像 李华
网站建设 2026/9/2 5:29:54

SolidWorks 2024终极安装指南:5步搞定专业三维CAD软件

SolidWorks 2024终极安装指南&#xff1a;5步搞定专业三维CAD软件 【免费下载链接】SolidWorks2024安装教程指南 本仓库提供SolidWorks 2024的安装教程指南及安装包资源。SolidWorks是一款广泛应用于机械设计领域的三维CAD软件&#xff0c;具有强大的功能和易学易用的特点。本教…

作者头像 李华
网站建设 2026/9/2 18:43:37

21、Linux系统软件添加与安全防护指南

Linux系统软件添加与安全防护指南 一、软件添加与更新 1.1 软件下载与安装流程 在进行软件下载和安装时,一般可按以下步骤操作: 1. 在对话框中点击“OK”,开始下载并安装程序。此过程中可能会要求输入root(管理员)密码,之后软件会被下载并添加到你的机器中。更新完成…

作者头像 李华
网站建设 2026/9/2 22:44:11

26、OpenOffice.org 办公套件全功能指南

OpenOffice.org 办公套件全功能指南 在日常办公和学习中,拥有一套功能强大且易用的办公软件至关重要。OpenOffice.org 就是这样一套优秀的办公套件,它包含了多种实用的工具,如用于演示的 Impress、绘图的 Draw、数据库管理的 Base 以及公式排版的 Math 等。下面将详细介绍这…

作者头像 李华