算法题
对称二叉树
101. 对称二叉树 - 力扣(LeetCode)
对称的含义:
完全相同
不对称的情况:左右子树层数不同
左右子树数值不同
/*** 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) {}* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left),* right(right) {}* };*/
class Solution {
public:bool fun(TreeNode* p, TreeNode* q) {if (!p && !q)//左右两边同时为空的时候,证明二叉树左右两方都遍历结束了,返回truereturn true;if (!p || !q)//只要有一个为空了,那就是不对称return false;if (p->val != q->val)//数值不相等,也是不对称return false;bool l = fun(p->left, q->right);//遍历左子树的左子树,又子树的右子树bool r = fun(p->right, q->left);//右边return l && r;}bool isSymmetric(TreeNode* root) { return fun(root->left, root->right); }
};
基础知识
请解释new和malloc的区别,并分别解释他们的用法
new是运算符在c++中支持运算符重载,malloc是库函数,不支持函数重载
new的返回值不需要强转,malloc的返回值是void*类型的,需要强转
new申请空间失败会抛出异常,malloc申请失败会返回为空
new申请空间不用填具体大小,malloc需要详细具体申请多大空间
new出的空间需要delete释放,malloc申请玩的空间需要free释放
使用new操作符来分配对象内存时会经历三个步骤:
调用operator new 函数(对于数组是operator new[])分配一块足够的内存空间(通常底层默认使用malloc实现,除非程序员重载new符号)以便存储特定类型的对象;
malloc分配失败会导致什么问题
- 程序异常终止 :在很多情况下,如果程序没有对
malloc
失败进行妥善处理,当malloc
无法分配所需内存时,它可能会返回NULL
指针。后续若程序继续尝试对这个NULL
指针进行解引用操作(例如向其写入数据或读取数据),就会导致程序崩溃。这种崩溃可能表现为段错误,因为程序试图访问非法的内存地址。 - 内存泄漏 :如果部分内存分配失败,但之前已经分配的用于管理这个数据结构的内存没有被释放,那么这部分内存就会一直被占用,直到程序结束,降低了内存的利用率。