自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(8)
  • 收藏
  • 关注

原创 快速排序和二叉树遍历的非递归

本文探讨了快速排序的非递归实现方法及其与二叉树遍历的关联。作者指出递归快排可能因key值选择不当导致栈溢出风险,提出用栈模拟递归过程:存储待排序区间,通过循环处理栈顶区间并压入子区间。同时揭示了快排非递归与二叉树前序遍历的相似性,并展示了对应的栈实现。进一步分析了中序和后序遍历的差异,提出通过记录"上一个访问节点"解决后序遍历的难点。文章通过代码示例详细说明了如何用栈结构实现这些算法,为理解递归转非递归提供了清晰的思路。

2025-10-10 15:53:04 813

原创 AVL树(平衡二叉搜索树)

AVL树是一种自平衡二叉搜索树,通过控制每个节点左右子树的高度差不超过1来保持平衡。它通过平衡因子(右子树高度减左子树高度)来监控平衡状态,当平衡因子变为±2时进行旋转调整。旋转方式包括四种:左单旋、右单旋、左右双旋和右左双旋。插入新节点时,先按二叉搜索树规则插入,然后更新祖先节点的平衡因子,必要时进行旋转调整。AVL树通过这种机制确保查找效率接近O(logN),优于普通二叉搜索树的最坏情况O(N)。

2025-09-19 23:41:48 1672

原创 二叉树算法题 之 二叉树的最近公共祖先

本文介绍了二叉树中寻找两个节点的最近公共祖先(LCA)的两种解法。第一种递归解法通过判断节点位置关系实现,时间复杂度为O(N^2);第二种优化解法利用前序遍历记录路径,通过比较路径交点确定LCA,时间复杂度降为O(N),以空间换时间。两种方法都详细分析了不同情况下LCA的判断逻辑,并提供了完整的代码实现,重点解决了当其中一个节点就是LCA的特殊情况。第二种方法通过栈结构存储路径,效率明显优于第一种方案。

2025-09-13 21:50:12 962 1

原创 C++继承

C++继承特性详解:本文系统介绍了C++中的继承机制,包括三种继承方式(public/protected/private)对成员访问权限的影响,重点分析了public继承的常规用法。详细阐述了子类对象的内存布局特点、子类与父类的类型转换规则(切片机制)、作用域关系及同名成员隐藏现象。深入讲解了子类默认成员函数(构造/拷贝/赋值/析构)的特殊处理规则,并对比了单继承与多继承的差异,特别指出了菱形继承带来的数据冗余和二义性问题及其解决方案(虚继承)。文章强调实际开发中应避免使用复杂的继承结构,优先采用publi

2025-09-12 20:55:36 1896

原创 初始化列表、static成员与友元声明(类和对象ep3)

之前我们实现对象的初始化,都是在构造函数体内部实现,但是其实还有一种初始化变量的方法:初始化列表。C++中的初始化列表是类和对象的构造中最重要的一环,因为类的对象中所有的非static成员变量都要在初始化列表中定义与初始化。

2025-09-09 09:12:26 845

原创 默认成员函数(类和对象ep2)

在C++中,在类的设计中引入了默认的成员函数,默认成员函数就是用户没有显式实现,编译器会自动生成的成员函数。在C++98中,默认成员函数存在6个,分别为构造函数,析构函数,拷贝构造函数,赋值符号的重载函数,还有两个不太重要的取地址符号的重载函数。其中前四个使我们经常要自己实现的,十分重要,需要我们重点掌握。另外,在C++11中又加入了两个默认成员函数,移动构造和移动赋值,我们暂且不提。

2025-08-29 16:20:23 720

原创 与类和对象的初相识(类和对象ep1)

摘要:本文介绍了面向对象编程中类和对象的基本概念,重点分析了C++中class与struct的区别、访问限定符public/private的作用以及类的实例化过程。详细解释了对象内存对齐规则,指出成员函数存储在代码区而非对象中,并探讨了空类实例化大小为1的原因。最后阐述了this指针的工作原理,说明它是成员函数的隐式参数,指向调用对象但不存储在对象内部。全文通过代码示例展示了C++类机制的核心特性。

2025-08-27 12:42:02 858

原创 初识C++

本文介绍了C++相对于C语言的一些重要改进特性。首先讲解了命名空间(namespace)的作用及使用方法,用于解决变量/函数名冲突问题。其次介绍了C++的流输入输出(cin/cout)比C语言的printf/scanf更便捷。然后详细说明了函数缺省参数、函数重载的规则和使用场景。接着重点分析了引用的概念、特性及其与指针的区别,包括普通引用和const引用的应用。最后介绍了内联函数(inline)优化短函数调用效率,以及C++引入nullptr关键字解决NULL指针在函数重载中的歧义问题。这些特性使C++在大

2025-08-25 23:44:15 1991

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除