实习冲刺Day19
算法题
平衡二叉树
平衡二叉树也叫AVL树,它或者是一颗空树,或者具有以下性质的二叉排序树:它的左子树和左子树的高度之差(平衡因子)的绝对值不超过1,且它的左子树和右子树都是一颗平衡二叉树。
它具有一个左子树和一个右子树,且对于任意一个子树而言,左子树和右子树高度只差不超过1。
110. 平衡二叉树 - 力扣(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:
//记录二叉树的左右子树深度
int fun(TreeNode*root){
if(!root)return 0;
int l=fun(root->left);
int r=fun(root->right);
return max(l,r)+1;
}
bool isBalanced(TreeNode* root) {
if(!root)return true;//遍历到节点为空时,返回true
int L=fun(root->left);//计算左子树高度
int R=fun(root->right);//计算右子树高度
if(abs(L-R)>1)return 0;//高度差大于1,返回false
bool l=isBalanced(root->left);//判断左子树符合
bool r=isBalanced(root->right);//判断右子树符合
return l&&r;//左右子树都符合才算是平衡二叉树
}
};
基础知识
什么是c++命名空间 有什么作用?
在C++中,命名空间(Namespace)是一种将代码组织成逻辑组的机制,用于避免不同代码模块之间的命名冲突。它提供了一个声明区域,在该区域内可以定义各种类型、函数、变量等,并且这些定义的名称在该命名空间内是唯一的。
1. 避免命名冲突:
不同的库或者代码可能存在相同的变量与函数,命名空间可以将他隔离开,使得同名的实体在各自的空间中有不同的作用域
2. 组织代码结构:命名空间有助于将相关的代码组织在一起,提高代码的可读性和可维护性。
3. 控制标识符的可见性:通过命名空间,可以控制哪些标识符在其他代码文件中是可见的,哪些是隐藏的。在一个命名空间中定义的标识符,如果没有被导出或使用 using 指令引入,在其他命名空间中是无法直接访问的,这样可以实现信息隐藏和封装,增强代码的安全性和稳定性。
如何定义使用命名空间?且交代命名空间是否允许嵌套?
使用 `namespace` 关键字来定义命名空间
namespace namespaceName {
// 在此处放置各种类型、函数、变量等的声明或定义
}
using namespace std;
namespace MyNamespace {
int n=10;
void funn() {
cout << "mynamesapce" << cout;
}
int main() {
cout << MyNamespace::n << endl;
MyNamespace::fun();
return 0;
}
在 main 函数中通过 MyNamespace:: 前缀来访问它们,这样就避免了与其他可能存在的同名变量或函数的冲突
C++ 中的命名空间是允许嵌套的。嵌套的命名空间可以进一步组织和细分代码,使其结构更加清晰,层次更加分明。