五、Flask学习之MySQL

五、Flask学习之MySQL

1. 下载MySQL

下载教程:MySQL安装及可视化工具SQLyog下载

2.常用指令

2.1. 查看已有数据库

show databases;

在这里插入图片描述

2.2. 创建数据库

create database 名字 DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

在这里插入图片描述

2.3. 删除数据库

drop database 名字;

在这里插入图片描述

2.4. 进入数据库

USE 名字;

在这里插入图片描述

2.5. 查看当前数据库下所有数据

show tables;

在这里插入图片描述

2.6. 创建数据表

数据表类似于Excel表格,有列名和类型

create table 表名(
    列名称 类型,
    列名称 类型,
    列名称 类型
)default charset=utf8;

假设我要创建的表格为:

idNameage

那么就使用下面的代码:

create table info1(
    id int,
    name varchar(16),
    age int
)default charset=utf8;

在这里插入图片描述

然后运行show tables就能看到是否创建成功数据表了。

如果要求输入数据时某一列不能为空,那么就需要使用not null

create table info1(
    id int not null, -- 不能为空
    name varchar(16), -- 默认是可以为空的
    age int
)default charset=utf8;

也可以给某一列设置默认值,如果没有传入值,就使用默认值,如果传入值就使用传入的值

create table info1(
    id int, 
    name varchar(16),
    age int default 3 -- 设置默认值为3
)default charset=utf8;

也可以在创建表的时候设置主键:主键不允许重复

id int primary key, 

或者直接按照序号1.2.3…,内部维护:

id int auto_increament primary key, 

2.7. 删除数据表

删除数据表使用:

drop table 数据表名字;

在这里插入图片描述

2.8. 查看表结构

desc 表名称;
mysql> desc info1;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int(11)     | NO   | PRI | NULL    | auto_increment |
| name  | varchar(16) | YES  |     | NULL    |                |
| age   | int(11)     | YES  |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+
3 rows in set (0.01 sec)

2.9. 添加数据

insert into 表名(列名1,列名2) values(数据1,数据2);
insert into 表名(列名1,列名2) values(数据1,数据2),(数据3,数据4); -- 批量添加
mysql> insert into info1(name,age) values("panda",20);
Query OK, 1 row affected (0.02 sec)

mysql> insert into info1(name,age) values("panda01",21),("panda02",22);
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0

2.10. 查看表

select * from 表名;
mysql> select * from info1;
+----+---------+------+
| id | name    | age  |
+----+---------+------+
|  1 | panda   |   20 |
|  2 | panda01 |   21 |
|  3 | panda02 |   22 |
+----+---------+------+
3 rows in set (0.00 sec)

3.常用数据类型

3.1. 整数

tinyint:用来存储比较小的整数
有符号范围:-128~127(默认)
无符号范围:0-255

int:用来存储一般的整数
有符号范围:-231~231-1(默认)
无符号范围:0-232-1

bigint:用来存储比较大的整数
有符号范围:-263~263-1(默认)
无符号范围:0-264-1

3.2. 小数

floatdouble用于存储小数,但是不精准,所以存储小数的时候一般用的是decimal

create table info2(
    id int not null primary key auto_increment,
    salary decimal(m,n) -- m是指传入数据的最大位数,n是指保留小数的位数,我这里假设m=3,n=2
)default charset=uft8;

insert into info2(salary) values(3.14); -- 没问题,不报错
insert into info2(salary) values(3.146); -- 超过设置的小数位数会四舍五入
insert into info2(salary) values(323.14); -- 有问题,会报错,超过最大位数了

3.3. 字符串

  • char

    定长字符串,例如char(6)是指固定用6位来存储,如果输入的位数小于6位,也会按照六位去存储;

  • varchar

    变长字符串,例如varchar(6)是指按照传入多少位就存储多少位的规则,但是不能超过括号里的数(6);

  • text

    用于保存长文本,最多保存216-1个字符;

  • mediumtext

    最多保存224-1个字符;

  • longtext

    最多保存232-1个字符;

3.4. 时间

  • datetime:比较精准,年月日时分秒
  • date:只有年月日

4.数据表的增删改查

4.1. 增

insert into 表名(列名1,列名2) values(数据1,数据2);
insert into 表名(列名1,列名2) values(数据1,数据2),(数据3,数据4); -- 批量添加

创建一个表格:

create table info2(
    id int not null primary key auto_increment,
    name varchar(16),
    birth date,
    grade decimal(5,2)
);

插入数据:

insert into info2(name,birth,grade) values("小明","2002-3-2",98.66);
insert into info2(name,birth,grade) values("小赵","2003-4-1",99.99);
insert into info2(name,birth,grade) values("小张","2004-5-7",89.34);
insert into info2(name,birth,grade) values("小秦","2003-6-6",96.7);
insert into info2(name,birth,grade) values("大白","2002-4-15",95.9);

执行命令:

select * from info2;

效果:

mysql> select * from info2;
+----+------+------------+-------+
| id | name | birth      | grade |
+----+------+------------+-------+
|  1 | 小明 | 2002-03-02 | 98.66 |
|  2 | 小赵 | 2003-04-01 | 99.99 |
|  3 | 小张 | 2004-05-07 | 89.34 |
|  4 | 小秦 | 2003-06-06 | 96.70 |
|  5 | 大白 | 2002-04-15 | 95.90 |
+----+------+------------+-------+
5 rows in set (0.01 sec)

4.2. 删

delete from info2; -- 删除数据表info2中所有数据
delete from info2 where id=1; -- 删除数据表info2中id=1的数据
delete from info2 where id<3; -- 删除数据表info2中id<3的数据
-- 删除数据表info2中name="小明" 并且grade=98.66的数据
delete from info2 where name="小明" and grade=98.66; 

4.3. 改

update info2 set grade=100; -- 修改数据表info2中列grade的数据为100
update info2 set grade=100 where 条件; -- 修改数据表info2中满足条件的列grade的数据为100

4.4. 查

select * from 表名称;-- 查询数据表中所有的数据
select 列名,列名 from 表名称;-- 查询数据表中特定列名的数据
select 列名,列名 from 表名称 where 条件;-- 查询数据表中符合条件的特定列名的数据

5.使用Python语句操作数据库

5.1. 创建数据

创建数据库:

create database demo DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
use demo;

创建数据表:

create table info(
    id int not null primary key auto_increment,
    name varchar(16) not null,
    passwd varchar(64) not null,
    mobile char(11) not null
)default charset=utf8;

5.2. 使用python连接数据库

使用命令下载相关模块:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pymysql==1.0.2
import pymysql

# 1.连接mysql
conn = pymysql.connect(host="127.0.0.1", port=3306, user="root", charset="utf8", passwd="123456", db="demo") # 这里的passwd和db要换成你自己密码和数据库
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

5.3. 添加数据

# 2.发送指令
cursor.execute("insert into info(name,passwd,mobile) values('panda','123465','12345678911') ")
conn.commit()  # 提交指令

如果使用Pycharm可能会标红显示错误,不用管,直接运行即可

检查数据表是否添加上了:

mysql> select * from info;
+----+-------+--------+-------------+
| id | name  | passwd | mobile      |
+----+-------+--------+-------------+
|  1 | panda | 123465 | 12345678911 |
+----+-------+--------+-------------+
1 row in set (0.00 sec)

格式化输入

上面的形式是比较死板的,如果你想使用格式化字符串的方法,不能使用Python自己的方法,而是要使用pymysql自带:

列表形式:

# 列表形式
sql = "insert into info(name, passwd, mobile) values(%s, %s, %s)"
my_list = ["小明", "qwe789", "11111111111"]
cursor.execute(sql, my_list)
conn.commit()  # 提交指令

数据已添加上:

mysql> select * from info;
+----+-------+--------+-------------+
| id | name  | passwd | mobile      |
+----+-------+--------+-------------+
|  1 | panda | 123465 | 12345678911 |
|  2 | 小明  | qwe789 | 11111111111 |
+----+-------+--------+----

字典形式:

# 字典形式
sql = "insert into info(name, passwd, mobile) values(%(name)s, %(passwd)s, %(mobile)s)"
data = {"name": "小李", "passwd": "pythonmysql", "mobile": "22222222222"}
cursor.execute(sql, data)
conn.commit()  # 提交指令

数据已添加上:

mysql> select * from info;
+----+-------+-------------+-------------+
| id | name  | passwd      | mobile      |
+----+-------+-------------+-------------+
|  1 | panda | 123465      | 12345678911 |
|  2 | 小明  | qwe789      | 11111111111 |
|  3 | 小李  | pythonmysql | 22222222222 |
+----+-------+-------------+-------------+
3 rows in set (0.00 sec)

5.4. 关闭连接

前面连接成功了,但是在文件运行结束之前要关闭连接

# 3.关闭连接
conn.close()
cursor.close()

5.5. 第一个小案例

结合上述知识,可以让用户自定义输入:

import pymysql

while True:
    username = input("请输入用户名:")
    if username.upper() == "Q":
        break
    passwd = input("请输入密码:")
    mobile = input("请输入电话:")
    # 1.连接mysql
    conn = pymysql.connect(host="127.0.0.1", port=3306, user="root", charset="utf8", passwd="4636996", db="demo")
    cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
    # 2.发送指令
    # 列表形式
    sql = "insert into info(name, passwd, mobile) values(%s, %s, %s)"
    my_list = [username, passwd, mobile]
    cursor.execute(sql, my_list)

    conn.commit()  # 提交指令
    # 3.关闭连接
    conn.close()
    cursor.close()

在这里插入图片描述

然后查询表格,发现已添加上:

mysql> select * from info;
+----+-------+-------------+-------------+
| id | name  | passwd      | mobile      |
+----+-------+-------------+-------------+
|  1 | panda | 123465      | 12345678911 |
|  2 | 小明  | qwe789      | 11111111111 |
|  3 | 小李  | pythonmysql | 22222222222 |
|  4 | 小C   | 123456      | 33333333333 |
|  5 | 小S   | 456798      | 44444444444 |
+----+-------+-------------+-------------+
5 rows in set (0.00 sec)

5.6. 查询数据

import pymysql

# 1.连接mysql
conn = pymysql.connect(host="127.0.0.1", port=3306, user="root", passwd="4636996", charset="utf8", db="demo")
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
# 2.发送指令
# cursor.execute("insert into info(name,passwd,mobile) values('panda','123465','12345678911')")

# 列表形式
sql = "select * from info"
cursor.execute(sql)
# 获取返还的数据
my_list = cursor.fetchall()
for each in my_list:
    print(each)
# 3.关闭连接
conn.close()
cursor.close()

得到:

{'id': 1, 'name': 'panda', 'passwd': '123465', 'mobile': '12345678911'}
{'id': 2, 'name': '小明', 'passwd': 'qwe789', 'mobile': '11111111111'}
{'id': 3, 'name': '小李', 'passwd': 'pythonmysql', 'mobile': '22222222222'}
{'id': 4, 'name': '小C', 'passwd': '123456', 'mobile': '33333333333'}
{'id': 5, 'name': '小S', 'passwd': '456798', 'mobile': '44444444444'}

5.7 删除数据

import pymysql

# 1.连接mysql
conn = pymysql.connect(host="127.0.0.1", port=3306, user="root", passwd="4636996", charset="utf8", db="demo")
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
# 2.发送指令
# cursor.execute("insert into info(name,passwd,mobile) values('panda','123465','12345678911')")

# 列表形式
cursor.execute("delete from info where id=%s",[5])
conn.commit()

# 3.关闭连接
conn.close()
cursor.close()

查询数据库数据得知已被删除:

mysql> select * from info;
+----+-------+-------------+-------------+
| id | name  | passwd      | mobile      |
+----+-------+-------------+-------------+
|  1 | panda | 123465      | 12345678911 |
|  2 | 小明  | qwe789      | 11111111111 |
|  3 | 小李  | pythonmysql | 22222222222 |
|  4 | 小C   | 123456      | 33333333333 |
+----+-------+-------------+-------------+
4 rows in set (0.00 sec)

5.8. 修改数据

import pymysql

# 1.连接mysql
conn = pymysql.connect(host="127.0.0.1", port=3306, user="root", passwd="4636996", charset="utf8", db="demo")
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
# 2.发送指令
# cursor.execute("insert into info(name,passwd,mobile) values('panda','123465','12345678911')")

# 列表形式
cursor.execute("update info set mobile='99999999999' where mobile=%s", ["22222222222"])
conn.commit()

# 3.关闭连接
conn.close()
cursor.close()

查询数据库数据得知已被修改:

mysql> select * from info;
+----+-------+-------------+-------------+
| id | name  | passwd      | mobile      |
+----+-------+-------------+-------------+
|  1 | panda | 123465      | 12345678911 |
|  2 | 小明  | qwe789      | 11111111111 |
|  3 | 小李  | pythonmysql | 99999999999 |
|  4 | 小C   | 123456      | 33333333333 |
+----+-------+-------------+-------------+
4 rows in set (0.00 sec)

6.Flask+前端+MySQL案例

MySQL数据库使用的是上面的demo下的info表

项目的目录结构:

在这里插入图片描述

app.py完整代码:(把数据库的密码设置成你自己的)

from flask import Flask, render_template, request
import pymysql

app = Flask(__name__)


@app.route('/add/user', methods=['POST', 'GET'])
def add_user():
    if request.method == 'GET':
        return render_template("add_user.html")
    else:
        # 接收数据
        name = request.form.get("username")
        passwd = request.form.get("passwd")
        mobile = request.form.get("mobile")
        # 与数据库建立连接
        conn = pymysql.connect(host="127.0.0.1", user="root", passwd="123456", db="demo", charset="utf8", port=3306)
        cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
        # 添加数据
        sql = "insert into info(name,passwd,mobile) values(%s,%s,%s)"
        data_list = [name, passwd, mobile]
        cursor.execute(sql, data_list)
        conn.commit()
        # 关闭连接
        conn.close()
        cursor.close()
        return "添加成功"


@app.route('/show/user')
def show_user():
    # 与数据库建立连接
    conn = pymysql.connect(host="127.0.0.1", user="root", passwd="123456", db="demo", charset="utf8", port=3306)
    cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
    # 查询数据
    sql = "select * from info"
    cursor.execute(sql)
    data_list = cursor.fetchall()
    # 关闭连接
    conn.close()
    cursor.close()
    return render_template("show_user.html", data_list=data_list)


if __name__ == '__main__':
    app.run(debug=True)

用户注册界面add_user.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>注册</title>
</head>
<body>
<h1>注册</h1>
<div>
    <form method="post" action="/add/user">
        <label>
            用户名:<input type="text" name="username" placeholder="请输入用户名......">
            密码:<input type="password" name="passwd" placeholder="请输入密码......">
            手机号:<input type="text" name="mobile" placeholder="请输入手机号......">
        </label>
        <input type="submit" value="提 交">
    </form>
</div>
</body>
</html>

效果:

在这里插入图片描述

查询用户列表界面show_user.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <!--替换为自己的BootSrap路径-->
    <link rel="stylesheet" href="/static/plugins/bootstrap-3.4.1-dist/css/bootstrap.css">
</head>
<body>
<div class="container">
    <h1 style="text-align: center">
        用户列表
    </h1>
    <div style="margin-top: 50px">
        <table class="table table-bordered">
            <thead>
            <tr>
                <td>序号</td>
                <td>用户名</td>
                <td>密码</td>
                <td>手机号</td>
            </tr>
            </thead>
            <tbody>
            {% for each in data_list %}
            <tr>
                <td>{{each.id}}</td>
                <td>{{each.name}}</td>
                <td>{{each.passwd}}</td>
                <td>{{each.mobile}}</td>
            </tr>
            {% endfor%}
            </tbody>
        </table>
    </div>
</div>
<!--替换为自己的BootSrap里JS路径-->
<script src="/static/plugins/bootstrap-3.4.1-dist/js/bootstrap.js"></script>
<!--替换为自己的JS路径-->
<script src="/static/js/jquery-3.7.1.min.js"></script>
</body>
</html>

效果:

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

《WebKit 技术内幕》学习之十五(4):Web前端的未来

4 Cordova项目 Cordova是一个开源项目&#xff0c;能够提供将Web网页打包成本地应用格式的可运行文件。读者可能对Cordova项目陌生&#xff0c;但是大家可能对它的前身非常熟悉&#xff0c;那就是PhoneGap项目&#xff0c;它后来被Adobe公司收购。 图15-4描述了Cordova的主要工…

Topaz Video AI:无损放大,让你的视频更清晰!

在当今的数字时代&#xff0c;视频内容的重要性越来越受到人们的关注。无论是在社交媒体上分享生活片段&#xff0c;还是在商业领域中制作宣传视频&#xff0c;人们都希望能够展现出更高质量的视频内容。 然而&#xff0c;由于各种原因&#xff0c;我们经常会面临一个问题&…

港口集装箱堆场温湿度监控MQTT无线传输智能节点

设备互联互通的时代已经到来&#xff0c;不同的设备之间需要实现数据互通&#xff0c;提高生产效率和管理效率。因此&#xff0c;一款功能齐全、性能稳定的设备显得尤为重要。我们来介绍一款4G/5G无线远程io模块。具有8DI兼容干湿节点、4DO继电器、6AI可选电流型4-20mA电压型0-…

常规的管理系统除了适用该有的范儿一定要有!气质上不能输

hello宝子们...我们是艾斯视觉擅长ui设计和前端开发10年经验&#xff01;希望我的分享能帮助到您&#xff01;如需帮助可以评论关注私信我们一起探讨&#xff01;致敬感谢感恩&#xff01; 常规的管理系统除了适用该有的范儿一定要有!气质上不能输 在现今快速发展的商业环境中…

HCIA学习作业三

要求&#xff1a; 拓扑图&#xff1a; <AR1>ping 5.5.5.1 <AR1>display ip interface brief <AR1>display ip routing-table <AR1>display ip routing-table protocol static <AR2>ping 5.5.5.1 <AR2>display ip interface brief <…

openssl3.2 - 测试程序的学习

文章目录 openssl3.2 - 测试程序的学习概述笔记openssl3.2 - 测试程序的学习 - test\aborttest.copenssl3.2 - 测试程序的学习 - test\sanitytest.copenssl3.2 - 测试程序的学习 - test\acvp_test.copenssl3.2 - 测试程序的学习 - test\aesgcmtest.cEND openssl3.2 - 测试程序的…

Redis2-事务 连接Java 整合springboot 注解缓存

一、订阅和发布 Redis 发布订阅 (pub/sub) 是一种消息通信模式&#xff1a;发送者 (pub) 发送消息&#xff0c;订阅者 (sub) 接收消息。 Redis 客户端可以订阅任意数量的频道。 Redis的发布和订阅 客户端订阅频道发布的消息 频道发布消息 订阅者就可以收到消息 发布订阅的代…

C# 使用 SapNwRfc 调用SAP RFC

好久没写过相关代码&#xff0c;今天又来贡献一篇 C# 使用 SapNwRfc 调用SAP RFC。用VS2022的WINFORM应用程序&#xff0c;使用NuGet中的SapNwRfc类库&#xff0c;call SAP系统中的RFC&#xff0c;传入7个参数&#xff0c;得到RFC返回的2张表的数据。 一、VS2022中新建WINFORM…

【汇总】解决Spring-Web与Spring-WebFlux冲突

【汇总】解决Spring-Web与Spring-WebFlux冲突 问题发现问题解决问题一&#xff1a;The bean requestMappingHandlerMapping, defined in class path resource [org/springframework/web/reactive/config/DelegatingWebFluxConfiguration.class],问题二&#xff1a;The Java/XML…

C语言-算法-背包

[USACO07DEC] Charm Bracelet S&#xff08;01背包&#xff09; 题目描述 Bessie has gone to the mall’s jewelry store and spies a charm bracelet. Of course, she’d like to fill it with the best charms possible from the N (1 ≤ N ≤ 3,402) available charms. E…

基于frp工具实现内网穿透,跨局域网远程SSH登录

文章目录 一.概述1.1 为什么要内网穿透&#xff1f;1.2 什么是frp&#xff1f; 二.frp安装管理流程2.1 frp下载2.2 部署2.3 通过systemd系统服务管理启动程序 三.frp配置测试&#xff08;通过SSH访问内网机器C&#xff09;3.1 服务端配置文件frps.toml修改3.2 客户端配置文件fr…

深入解析HTTPS:安全机制全方位剖析

随着互联网的深入发展&#xff0c;网络传输中的数据安全性受到了前所未有的关注。HTTPS&#xff0c;作为HTTP的安全版本&#xff0c;为数据在客户端和服务器之间的传输提供了加密和身份验证&#xff0c;从而确保了数据的机密性、完整性和身份真实性。本文将详细探讨HTTPS背后的…

护眼落地灯哪个牌子更好更专业?经典落地灯排名

不知道各位家长有没有发现&#xff0c;近几年来小小年纪就戴眼镜的孩子真的越来越多了&#xff01; 根据专家数据统计&#xff0c;在全国青少年近视率中小学生就占其40%比重&#xff0c;也代表了10个学生中就有4、5个是戴眼镜的。造成这个趋势的原因也不难理解&#xff0c;一是…

多个SSH-Key下,配置Github SSH-Key

首先&#xff0c;检查 github 的连接性&#xff0c;因为DNS污染的原因&#xff0c;很多机器ping不通github&#xff0c;就像博主的机器&#xff1a; 怎么解决DNS污染的问题&#xff0c;博主查了很多教程&#xff0c;测试出一个有效的方法&#xff0c;那就是修改hosts文件。host…

dubbo和eureka的区别

dubbo可以作为客户端&#xff0c;也可以作为服务端&#xff0c;因此他内置了很多序列化框架可供选择&#xff0c;通过配置可以进行选择。默认是hession&#xff0c;还有gson&#xff0c;fastJson&#xff0c;jdk自带的序列化。 eureka只能作为服务端&#xff0c;他序列要与客户…

01_ESP32 MicroPython开发环境搭建

一、工作原理 Python源代码->Python解释器(MicroPython)-->二进制代码(01010)-->硬件电路(ESP32)-->高低电平输出-->其他设备 二、准备工作&#xff1a; 硬件&#xff1a;ESP32开发版&#xff0c;有很多个版本可选&#xff0c;我这里用的是ESP-32开发板&…

关于一个微信自动回复的平台

这是去年整的项目&#xff0c;源码在此。那个时候刚好在学习golang&#xff0c;那么学了那不得用起来嘛&#xff1f;于是就mk代码。 基本功能如下 pc端&#xff1a;主要功能就是登陆微信。 微信小程序&#xff1a;主要是为了方便管理自动回复的状态&#xff0c;在pc端登陆完…

【CANoe使用大全】——报文发送(IG)

&#x1f64b;‍♂️【CANoe使用大全】系列&#x1f481;‍♂️点击跳转 文章目录 1.仿真报文概述2.IG模块的使用2.1.IG模块打开方式 3.添加报文4.添加报文后的配置4.1.发送方式配置4.1.1.鼠标触发4.1.2.键盘触发4.2.3.周期发送 4.3 信号值修改编辑 1.仿真报文概述 报文发送一…

每日一题——LeetCode1346.检查整数及其两倍数是否存在

方法一 循环查找 用indexOf查找每个元素的两倍是否存在在数组中&#xff0c;找到了就直接return true&#xff0c;循环结束还没找到就return false var checkIfExist function(arr) {for(let i0;i<arr.length;i){let index arr.indexOf(arr[i]*2)if(index>0 &&…

代码随想录算法训练营第十六天 |104.二叉树的最大深度,111.二叉树的最小深度,222.完全二叉树的节点个数(待补充)

104.二叉树的最大深度 1、题目链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 2、文章讲解&#xff1a;代码随想录 3、题目&#xff1a; 给定一个二叉树&#xff0c;找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长…