- 博客(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关注的人
RSS订阅