力扣 平衡二叉树-110

news2024/11/13 16:07:52

平衡二叉树-110

class Solution {
public:
    /*如果 height 函数返回的值大于等于 0,说明整个二叉树是平衡的
    (因为在height函数中,只有当发现不平衡的情况时才会返回 -1),
    此时函数返回 true;否则返回 false*/
    bool isBalanced(TreeNode* root) {
        return height(root) >= 0;
    }
    int height(TreeNode* root) {
    /*函数接受一个指向二叉树节点的指针root,如果root为NULL,表示当前节点为空,
    按照二叉树高度的定义,空节点的高度为 0,所以直接返回 0*/
        if (root == NULL) {
            return 0;
        }
    //通过递归调用height函数分别计算当前节点root的左子树高度left和右子树高度right。
        int left = height(root->left);
        int right = height(root->right);
    /*在得到左右子树高度后,进行判断,如果左子树高度为 -1,或者右子树高度为 -1,
    并通过abs函数计算左右子树高度差的绝对值,如果这个绝对值大于 1
    这说明着在递归计算子树高度的过程中已经发现了子树不平衡的情况,直接返回 -1*/
        if (left == -1 || right == -1 || abs(left - right) > 1) {
            return -1;
        } else {
    /*如果以上不平衡的条件都不满足,说明当前节点及其子树是平衡的,
    此时返回左右子树中较高的高度加 1,作为当前节点所在子树的高度*/
            return max(left, right) + 1;
        }
    }
};

每日问题

什么是C++命名空间,有什么作用?

1.定义

在C++中,命名空间(namespace)是一种用于将代码中的标识符(如变量、函数、类等)分组并避免命名冲突的机制。它提供了一个逻辑上的范围,它提供了一个逻辑上的范围,使得再不同命名空间中的相同名称可以独立存在。

例如,有两个不同的库都定义了一个名为 print 的函数。如果没有命名空间,当同时使用这两个库时,编译器会不知道该使用哪个 print 函数,从而产生命名冲突。而命名空间可以将这些同名的标识符分隔开。

2.作用

避免命名冲突:

这是命名空间最主要的作用。当开发大型项目时,可能会有多个开发人员编写代码,或者使用多个第三方库。不同的部分可能会定义相同名称的变量、函数或类。例如例如,一个游戏开发团队可能有一个名为 Physics 的模块用于处理物理计算,其中有一个函数 calculateForce;同时,一个图形渲染模块也可能有一个同名的函数 calculateForce,用于计算与图形渲染相关的力。通过将它们放在不同的命名空间中,如 namespace Physics 和 namespace Graphics,可以避免命名冲突。

代码的组织和模块化:

命名空间有助于将相关的代码组织在一起。例如,在一个数学库中,可以将所有与几何计算相关的代码放在一个命名空间(如 namespace Geometry)中,将所有与代数计算相关的代码放在另一个命名空间(如 namespace Algebra)中。这样,代码的结构更加清晰,便于阅读和维护。

控制标识符的可见性:

可以通过命名空间来控制标识符的访问范围。例如,一个命名空间中的某些函数或变量可能是供内部使用的,不希望被外部代码直接访问。可以将这些标识符定义在一个特定的命名空间中,并限制其访问权限,从而提高代码的封装性。

3.使用示例

定义命名空间:

可以使用namespace关键字来定义命名空间。例如:

namespace MyNamespace{
    int myVariable;
    void myFunction(){
        //函数体    
    }
    class MyClass{
        //类的定义                
    };
}

在这个例子中,myVariable和myFunction和MyClass都属于MyNamespace命名空间。

命名空间的分文件定义:

命名空间的定义可以分布在多个文件中。例如,在一个头文件my_namespace_header.h中可以这样定义:

#ifndef MY_NAMESPACE_HEADER_H
#define MY_NAMESPACE_HEADER_H
namespace MyNamespace {
    void function_declaration();
}
#endif

然后在对应的源文件my_namespace_source.cpp中实现函数

#include "my_namespace_header.h"
namespace MyNamespace {
    void function_declaration() {
        // 函数实现
    }
}

访问命名空间中的成员:

有多种方式来访问命名空间种的成员。

使用作用域解析运算符(::):

例如,如果要在命名空间外部访问myFunction,可以这样写:

MyNamespace::myFunction();

使用using关键字:

using关键字可以将命名空间中的成员引入到当前作用域,使得在访问这些成员时不需要再使用作用域解析运算符。例如:

using MyNamespace::myFunction;
myFunction();

不过这种方式要谨慎使用,因为如果有多个命名空间中有同名的成员,可能会再次引入命名冲突。

还可以使用using namespace来引入整个命名空间,如using namespace MyNamespace;,但这种方式可能会导致更多的潜在命名冲突,一般不推荐在头文件中使用。

交代命名空间是否允许嵌套?

命名空间是允许嵌套的。例如:

可以定义一个嵌套的命名空间:

namespace OuterNamespace {
    int outerVariable = 100;
    namespace InnerNamespace {
        int innerVariable = 200;
        void innerFunction() {
            // 函数体
        }
    }
}

要访问嵌套命名空间中的成员,可以使用多级作用域解析运算符。例如,要访问innerVariable和innerFunction,可以这样写:

int main() {
    OuterNamespace::InnerNamespace::innerVariable = 300;
    OuterNamespace::InnerNamespace::innerFunction();
    return 0;
}

也可以使用using声明或using namespace来简化对嵌套命名空间成员的访问,但同样要注意可能带来的命名冲突问题。例如,使用using声明:

using OuterNamespace::InnerNamespace::innerFunction;
int main() {
    innerFunction();
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2239495.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【软件工程】ATAM架构权衡评估方法

ATAM架构权衡评估方法 概述质量属性有哪些?质量属性的效用树怎么构建?如何确定质量属性的优先级? 概述 ATAM(Architecture Tradeoff Analysis Method)是一种系统架构评估方法,由卡梅隆大学软件工程协会提出…

BPMNJS设计器开发核心功能分析

系统功能 在开发一个前端工作流设计器,尤其是基于BPMN(业务流程建模与标注)或类似于钉钉的设计器时,主要需求可以总结为以下几个关键点: 1. 流程节点与边的设计 节点类型多样化:支持基础节点&#xff08…

快递100 物流查询API全面解析

一.基础准备 1.物流查询痛点 如何通过物流单号实时查询物流信息?如何实时查看物流地图轨迹? 使用快递 100,用户可以通过简单地输入快递单号来获取快递的详细物流状态,不仅能看到包裹目前的位置信息,还可以了解它的运输进展。 快递 100API…

多角度审视推荐系统

参考自《深度学习推荐系统》——王喆,用于学习和记录 介绍 推荐工程师需要从不同的维度审视推荐系统,不仅抓住问题的核心,更要从整体上思考推荐问题。 具体包括以下内容: (1)推荐系统如何选取和处理特征…

网络自动化04:python实现ACL匹配信息(主机与主机信息)

目录 背景分析代码代码解读代码总体结构1. load_pattern_from_excel 函数2. match_and_append_pattern 函数3. main 函数总结 最终的效果: 今天不分享netmiko,今天分享一个用python提升工作效率的小案例:acl梳理时的信息匹配。 背景 最近同事…

如何查看电脑关机时间

要查看电脑的关机时间,可以按照以下步骤进行操作: 1. 打开事件查看器:按下键盘上的Windows键R键,然后在弹出的运行对话框中输入"eventvwr.msc",并按下Enter键。 2. 在事件查看器窗口中,单击左侧窗…

3DTiles之i3dm介绍

3DTiles之i3dm介绍 3D Tiles 是一种用于高效存储和传输三维城市、建筑、地形、点云等空间数据的开放标准格式。i3dm(Intel 3D Model)是 3D Tiles 中用于表示三维模型(如建筑物或其他对象)的一个子格式。i3dm 格式的出现&#xff…

Java | Leetcode Java题解之第559题N叉树的最大深度

题目&#xff1a; 题解&#xff1a; class Solution {public int maxDepth(Node root) {if (root null) {return 0;}Queue<Node> queue new LinkedList<Node>();queue.offer(root);int ans 0;while (!queue.isEmpty()) {int size queue.size();while (size &g…

【机器学习入门】(1) 线性回归算法

学习目标&#xff1a; 线性回归是一种基本的统计学习方法&#xff0c;主要用于分析一个或多个自变量与因变量之间的线性关系。以下是关于线性回归的一些关键点&#xff1a;线性回归的四要素&#xff1a; &#xff08;1&#xff09;假设(hypothesis)&#xff1b;&#xff08;2&…

视频会议接入GB28181视频指挥调度,语音对讲方案

传统的视频会议指挥调度系统目前主流的互联网会议大部分都是私有协议&#xff0c;功能都很独立。目前主流的视频监控国标都最GB平台&#xff0c;新的需求要求融合平台要接入监控等设备&#xff0c;并能实现观看监控接入会议&#xff0c;实时语音设备指挥现场工作人员办公实施。…

一文1800字使用Jmeter进行http接口性能测试!

接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换&#xff0c;传递和控制管理过程&#xff0c;以及系统间的相互逻辑依赖关系等。 为什么要做接口测试&#xff1f; 越底层发现b…

搭建监控系统Prometheus + Grafana

公司有个技术分享会&#xff0c;但是业务忙&#xff0c;没时间精心准备&#xff0c;所以就匆匆忙忙准备分享一下搭建&#xff08;捂脸哭&#xff09;。技术含量确实不多&#xff0c;但是分享的知识确实没问题。 以下是搭建过程&#xff1a; 一、讲解 Prometheus Prometheus 最…

ArkTS中的自定义构建函数、Tab栏和组件状态共享

一、自定义构建函数 1.构建函数 Builder 1.1 介绍 文档地址&#xff1a;https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-builder-V5?catalogVersionV5 概念&#xff1a;ArkUI提供了一种轻量的UI元素复用机制Builder&#xff0c;可以将重复使用的U…

二维、三维情况下的锚点优选方法

多锚点定位时&#xff0c;锚点的选择对定位精度有重要影响。下面介绍基于误差最小化的锚点选择的相应公式和MATLAB代码示例&#xff0c;并进行详细分析 文章目录 方法描述代码MATLAB代码示例代码运行结果 总结 方法描述 选择能够最小化定位误差的锚点组合。通过计算锚点位置与…

CCF ChinaOSC |「开源科学计算与系统建模openSCS专题分论坛」11月9日与您相约深圳

2024年11月9日至10日&#xff0c;以“湾区聚力 开源启智”为主题的2024年中国计算机学会中国开源大会&#xff08;CCF ChinaOSC&#xff09;将在深圳召开。大会将汇聚国内外学术界、顶尖科技企业、科研机构及开源社区的精英力量&#xff0c;共同探索人工智能技术和人类智慧的无…

力扣102:二叉树的层次遍历

给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;[[3],[9,20],[15,7]]示例 2&#xff1a; 输入&a…

数学建模模型算法-Python实现

一、评价决策类 1、层次分析法&#xff08;AHP&#xff09; 层次分析法用来评价或选择一个更好更优的决策或方案 通过找到可以衡量其好坏的指标&#xff0c;进而衡量指标&#xff0c;再形成评价体系 归一化处理 让指标在同一数量级&#xff0c;且保证在同一指标下其差距保持…

linux-vlan(1)

# VLAN # 1.topo # 2.创建命名空间 ip netns add ns1 ip netns add ns2 ip netns add ns3 # 3.创建veth设备 ip link add ns1-veth0 type veth peer name ns21-veth0 ip link add ns3-veth0 type veth peer name ns23-veth0 # 4.veth设备放入命名空间,启动接口 ip link set n…

spring cloud 入门笔记1(RestTemplate,Consul)

最大感受&#xff1a; spring cloud无非是将spring boot中的各个工作模块拆分成独立的小spring boot&#xff0c;各个模块之间&#xff0c;不再是通过导包什么的&#xff0c;调用而是通过网路进行各个模块之间的调用 工具一&#xff1a;RestTemplate 在Java代码中发送HTTP请…

FlinkSql读取kafka数据流的方法(scala)

我的scala版本为2.12 <scala.binary.version>2.12</scala.binary.version> 我的Flink版本为1.13.6 <flink.version>1.13.6</flink.version> FlinkSql读取kafka数据流需要如下依赖&#xff1a; <dependency><groupId>org.apache.flink&…