C++空指针可以调用类成员函数,但是【不能调用】类中的【虚函数】 一个对象的指针可以调用它的成员函数和虚函数, 那么如果一个指向空nullptr的指针,能不能调用它的成员函数和虚函数。 ``` #include<iostream> using namespace std; class A {
我们有如下的单例设计模式的实现: template <typename T> class OnceSingle { public: OnceSingle() = delete; OnceSingle& operator=(const OnceSingle<T>& m) = delete; ~OnceSingle() = default; class CGFunctionClass { public:
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} *
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} *
二叉搜索树定义: 节点左子树只包含小于当前节点的数; 节点右子树只包含大于当前节点的数; 所有左子树和右子树自身必须也是二叉搜索树。 实际上,若中序遍历二叉搜索树,所得序列是单调递增的,利用这一性质来判断是否是二叉搜索树。 递归法 创建一个指针pre,指向中序遍历过程中的当前节点
带明显的回溯的版本 #include <vector> using std::vector; class Solution { private: vector<int> res; int sum = 0; public: void cnt_sum(TreeNode *root) { if (root->left == nullptr && root->right == nullptr) {
Vector底层实现 vector的三个私有成员 :_start 记录初始位置 , _finish 记录有效字符 , _endofstoage 记录容量大小 vector会存储的类型不同,所以要用模版来定类型 typedef T* iterator; iterator _start; iterator _finish; iterator _endofstoage; 也就是T*
998. 最大二叉树 II 图床:blogimg/刷题记录/leetcode/998/ 刷题代码汇总:https://www.cnblogs.com/geaming/p/16428234.html 题目 思路 看到树就要想到递归。 解法 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; *
1、str::tr1命名空间 其中包括shared_ptr和regex,他们都被搬到str命名空间中了 2、https://isocpp.org/blog/2014/03/compiler-support-for-c11-and-c14 可以查看支持的情况 3、C++之父的网站及其它: https://www.stroustrup.com/ cpluscplus.com,reference,tutorials家庭教师? c
中序遍历 中序遍历无法直接利用栈进行遍历,需要利用指针进行遍历,对栈中的节点进行操作。 对于中间节点,如果指针遍历到了,但没有进行处理,就再push()一个nullptr,作为标记,说明这个节点只是遍历过了,但是没有处理。事实上,每个待处理(放入vector)中的节点,其在栈中的上层元素都会是nullptr
101. 对称二叉树 给你一个二叉树的根节点 root , 检查它是否轴对称。 示例 1: 输入:root = [1,2,2,3,4,4,3] 输出:true 示例 2: 输入:root = [1,2,2,null,3,null,3] 输出:false 提示: 树中节点数目在范围 [1, 1000] 内 -100 <= Node.val <= 100 题解 根据此题相同的树的基础,
100. 相同的树 给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。 示例 1: 输入:p = [1,2,3], q = [1,2,3] 输出:true 示例 2: 输入:p = [1,2], q = [1,null,2] 输出:false 示例 3:
思路 难度中等87收藏分享切换为英文接收动态反馈 给定一颗根结点为 root 的二叉树,树中的每一个结点都有一个 [0, 25] 范围内的值,分别代表字母 'a' 到 'z'。 返回 按字典序最小 的字符串,该字符串从这棵树的一个叶结点开始,到根结点结束。 注:字符串中任何较短的前
for,new等 遍历循环 取别名的方式最好 #include <iostream> using namespace std; int main() { int v[]{ 12,13,14,15 }; for (auto x : v) { cout << x << endl; } cout << "-------------" << endl; for (auto x : { 17,18,19 }) {
题目 题解 在力扣 题目98- 验证二叉搜索树中 我们知道了 中序遍历后的二叉搜索树 应该为递增 那么出错就应该是有部分递减 那么我们在98题的基础上 反向检测 保存减少数列的开头与结尾进行交换 代码 1 #include<iostream> 2 #include<vector> 3 #include<stack> 4 using n
Given the root of a binary tree, return the level order traversal of its nodes' values. (i.e., from left to right, level by level). Solution 用 \(BFS\) 即可,每次将该层的节点 \(pop\), 然后 \(push\) 其子数的节点 点击查看代码 /** * Definition for a binary tree n
Given the root of a binary tree, invert the tree, and return its root. Solution: 直接使用 \(DFS\) 进行递归即可: 点击查看代码 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * T
题目 题解 二叉树有点忘记了 专门去复习了 一遍 其实就是 左中右 一看用递归或者栈吧 栈比较简单一些 我们直接不断向左移动 碰到空就向栈顶的右走即可 代码 1 #include<iostream> 2 #include<vector> 3 #include<stack> 4 using namespace std; 5 6 struct TreeNode {
1.1 nullptr nullptr 出现的目的时为了替代 NULL。在某种意义上说,传统 C++ 会把NULL、0视为同一种东西,这取决于编译器如何定义 NULL,有些编译器会将 NULL 定义为((void*)0), 有些则会直接定义为 0。 C++ 不允许直接将 void *隐式转换到其他类型,但如果 NULL 被定义为 ((void*)0),那么
1.1 #include <iostream> using namespace std; void foo(char *p) { cout << "char*" << endl; } void foo(int p) { cout << "int" << endl; } int main() { cout << "hello world" <
Add Two Numbers LeetCode/力扣 模拟两个数相加 用一个数表示进位 ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { ListNode *t1 = l1, *t2 = l2; int n1 = 0, n2 = 0, c = 0; ListNode *prev = nullptr; while(t1 && t2) { int sum = t1->val
题目描述 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 示例1 输入:head = [1,2,3,4,5] 输出:[5,4,3,2,1] 实例2 输入:head = [1,2] 输出:[2,1] 示例3 输入:head = [] 输出:[] 提示 链表中节点的数目范围是 [0, 5000] -5000 <= Node.val <= 5000 思路 没遍历一个节点
加速输入输出 当碰到ACM模式下的笔试题,使用C++的cin和cout流,通常会比C原生scanf和printf慢很多。原因是C++为了兼容scanf和printf,做了很多设计。但通常而言,使用cin和cout会比scanf和printf顺手很多。为了兼顾感觉和效率,可以在代码中添加以下两行,关闭对C的兼容。此时,C++原生输入输
描述 将给出的链表中的节点每k个一组翻转,返回翻转后的链表 如果链表中的节点数不是k的倍数,将最后剩下的节点保持原样 你不能更改节点中的值,只能更改节点本身。 数据范围:0≤n≤2000 ,1≤k≤2000 ,链表中每个元素都满足0≤val≤1000 要求空间复杂度O(1),时间复杂度O(n) 例如: 给定的链表
描述 将一个节点数为size链表m位置到n位置之间的区间反转,要求时间复杂度O(n),空间复杂度O(1)。 例如: 给出的链表为1→2→3→4→5→NULL, m=2,n=4, 返回1→4→3→2→5→NULL. 数据范围: 链表长度0<size≤1000,0<m≤n≤size,链表中每个节点的值满足∣val∣≤1000 要求:时间复杂度O(n) ,空