leetcode刷题-二叉树02

news2024/11/15 6:00:37

代码随想录二叉树part02|102.层序遍历、226.翻转二叉树、101.对称二叉树

    • 102.层序遍历--十题
    • 226.翻转二叉树
    • 101.对称二叉树

102.层序遍历–十题

代码随想录文档讲解
LeetCode102

图论中的深度搜索和广度搜索分别对应二叉树中的递归遍历和层序遍历。

  	3
   /   \
  9		20
  		/	\
  	  15	 7

返回层序遍历结果:

[
[3],
[9, 20],
[15, 7]
]

依赖队列完成,每一层要记录队列中的size,以便后续弹出元素

伪代码c++

queue<TreeNode*> que;
if(root != NULL) que.push(root);
while( ! que){
	size = que.size();
	vector<int> vec;
	while(size--){
		node = que.front();
		que.pop();
		vec.push_back(node->val);
		if(node->left) que.push(node->left);
		if(node->right) que.push(right->right);
	}
	result.push_back(vec);
}

python代码

python collections.deque()简介

from collections import deque
str = 'abcd'
dstr = deque(str)
# dstr :  deque(['a', 'b', 'c', 'd'])

# append() : 从右端添加元素,与list相同
dstr.append(4)
# dstr :  deque(['a', 'b', 'c', 'd', 4])

# appendleft() : 从左端添加元素
dstr.appendleft(3)
# dstr :  deque([3, 'a', 'b', 'c', 'd', 4])

# pop(): 移除列表中的一个元素(默认最右端的一个元素),并且返回该元素的值(与list同),如果没有元素,将会报出IndexError
# popleft():移除列表中的一个元素(默认最左端的一个元素),并且返回该元素的值,如果没有元素,将会报出IndexError
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
from collections import deque
class Solution:
    def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
        if not root:
            return []
        queue = deque([root])
        result = []
        while queue:
            level = []
            size = len(queue)
            while size :
                cur = queue.popleft()
                level.append(cur.val)
                if cur.left:
                    queue.append(cur.left)
                if cur.right:
                    queue.append(cur.right)
                size -= 1
            result.append(level)
        return result

相关题目:LeetCode:102、104、107、111(前面已完成)、116、117、199、429、515、637

226.翻转二叉树

leetcode题目链接
代码随想录文档讲解

题目描述:在这里插入图片描述

思路

其实就是两两交换节点的左右孩子。
想清楚这道题目应该用哪种遍历方式:递归(前、中、后序)?非递归?
本题使用前序或者后序最为方便。

伪代码(C++)

# 递归:递归三部曲
TreeNode* invertTree(root){
	if(root==NULL) return root;
	// 前序遍历 根左右
	swap(root->left, root->right);
	invertTree(root->left);
	invertTree(root->right);
}

python代码

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def invertTree(self, root: Optional[TreeNode]) -> Optional[TreeNode]:
        if not root:
            return root
        root.left, root.right = root.right, root.left
        self.invertTree(root.left)
        self.invertTree(root.right)
        return root

101.对称二叉树

leetcode题目链接
代码随想录文档讲解

思路

不能判断左右孩子是否相等,应该判断根节点的左子树和右子树是否可以相互翻转,↑翻转二叉树。
其实比较的是外侧的节点是否相等,内侧的节点是否相等,如下图:
在这里插入图片描述
确定遍历顺序:只能使用后序遍历(左右根),因为要不断收集左右孩子的信息返回给上一个节点。

伪代码(C++)

bool compare(TreeNode* left, TreeNode* right){
	if(left==NULL && right!=NULL) return false;
	else if(left!=NULL && right==NULL) return false;
	else if(left==NULL && right==NULL) return true;
	else if(left->val != right->val) return false;
	bool outside = compare(left->left, right->right);
	bool inside = compare(left->right, right->left);
	return outside && inside
}

python代码

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def isSymmetric(self, root: Optional[TreeNode]) -> bool:
        if not root:
            return True
        return self.compare(root.left, root.right)

    def compare(self, left, right):
        if(left == None and right != None):
            return False
        elif(left != None and right == None):
            return False
        elif(left == None and right == None):
            return True
        elif(left.val != right.val):
            return False
        outside = self.compare(left.left, right.right)
        inside = self.compare(left.right, right.left)
        return outside and inside

除此之外,也可使用迭代法(队列、栈都可)

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

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

相关文章

ubuntu 20.04禁止自动更新内核驱动、显卡驱动(使用命令行)

本文目录 一、禁止更新内核1.1 查看当前内核1.2 查看安装的内核1.3 根据需求&#xff0c;使用hold参数禁止固定内核1.4 查询被锁定不更新软件包的状态 二、禁止更新显卡驱动2.1 查看安装的显卡驱动2.2 查看详细的详细的显卡信息2.3 禁止显卡驱动更新2.4 查询显卡是否设置成功 前…

记录大三上学期大数据课程设计:基于Hadoop和Spark的中文手写数字实时识别系统

我整理好了两个百度网盘链接&#xff0c;一个是模型文档和数据&#xff0c;一个是镜像&#xff0c;下载、导入虚拟机即可运行。 github地址&#xff1a;Li-Jihong/big-data: 用来记录大三上学期大数据课程设计&#xff1a;基于Hadoop和Spark的中文手写数字实时识别系统 (githu…

c# 二维图形绘制实践

1.等边三角形 1.1 概述 1.2 代码 using System; using System.Drawing; using System.Windows.Forms;public partial class TriangleForm : Form {public TriangleForm(){//InitializeComponent();// 确保窗体大小足够大&#xff0c;以容纳三角形 this.ClientSize new Siz…

计算机网络(1) OSI七层模型与TCP/IP四层模型

一.OSI七层模型 OSI 七层模型是国际标准化组织ISO提出的一个网络分层模型&#xff0c;它的目的是使各种不同的计算机和网络在世界范围内按照相同的标准框架实现互联。OSI 模型把网络通信的工作分为 7 层&#xff0c;从下到上分别是物理层、数据链路层、网络层、传输层、会话层、…

小魔推-短视频矩阵批量创作一键分发同城引流工具

​小魔推是一款短视频营销裂变推广工具&#xff0c;主要服务于想做短视频营销的实体商家&#xff0c;通过BGC、PGC、UGC的打造帮助商家实现流量裂变与转化。 其中&#xff0c;小魔推AI矩阵营销是借助AI技术帮助企业/商家搭建营销矩阵&#xff0c;让商家拥有足够多的账号、足够…

matlab-2-simulink-小白教程-如何绘制电路图进行电路仿真

以上述电路图为例&#xff1a;包含D触发器&#xff0c;时钟CLK,与非门 一、启动simulink的三种方式 方式1 在MATLAB的命令行窗口输入“Simulink”命令。 方式2 在MATLAB主窗口的“主页”选项卡中&#xff0c;单击“SIMULINK”命令组中的Simulink命令按钮。 方式3 从MATLAB…

最小二乘法原理及其代码实现

一、最小二乘法原理 假设目前我们有一些数据&#xff0c;x是输入&#xff0c;y是与之对应的输出。现在想利用这些已有的数据&#xff0c;从中发现出规律&#xff0c;来预测没有出现过的输入会产生什么样的输出。 假设系统为单输入单输出系统&#xff0c;我们想在这个系统里找到…

【TB作品】MSP430F5529 单片机,数字时钟设计与实现,整点时通过蜂鸣器播放音乐进行报时

基于单片机的数字时钟设计与实现 作品名称 基于MSP430单片机的OLED显示数字时钟 作品功能 本作品实现了一个具有时间显示和整点报时功能的数字时钟。通过OLED屏幕显示当前时间&#xff0c;用户可以通过按键设置时间&#xff0c;并在整点时通过蜂鸣器播放音乐进行报时。 作…

Serif Affinity 2.5 (macOS, Windows) - 专业创意软件

Serif Affinity 2.5 (macOS, Windows) - 专业创意软件 Affinity Designer 2, Affinity Photo 2, Affinity Publisher 2 请访问原文链接&#xff1a;Serif Affinity 2.5 (macOS, Windows) - 专业创意软件&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主…

如何优化仓库布局与ERP库存管理

一、引言 随着企业规模的不断扩大&#xff0c;仓库管理和库存控制成为企业运营中不可或缺的一环。优化仓库布局和提高ERP库存管理效率&#xff0c;对于降低企业成本、提高物流效率、增强企业竞争力具有重要意义。 二、优化仓库布局 1. 分析仓库需求 在优化仓库布局之前&…

【学习笔记】Linux

Linux 1、 介绍 1.1、概述 1.2、特点 1.3、Linux的发行版2、 基础篇 —— 文件系统 2.1、文件系统 2.2、目录结构3、 基础篇 —— VI/VIM 编辑器 3.1、概述 3.2、编辑器模式及常用命令4、 基础篇 —— 网络配置 4.1、VMware NetWork …

【Linux】shell——条件判断test,各种运算符,expr

条件判断——test 真——0 假——1 test expression or [ expression ] 整数运算符 字符串运算符 -z 长度是否为0 -n 长度是否不为0 str1 str2 str1 ! str2 补 &&-->逻辑与&#xff0c;前面为真后面才会执行 || -->逻辑或&#xff0c;前面为假后面才…

【算法实战】每日一题:18.1并查集知识点讲解以及算法实战

1.题目 给定一个序列&#xff0c;通过n-1次相邻元素的合并操作&#xff0c;恢复原始序列。 2.涉及知识点 - 并查集 (Union-Find) 并查集 (Union-Find) 详解 概述 并查集&#xff08;Union-Find&#xff09;&#xff0c;也称为不相交集数据结构&#xff0c;用于处理一些不相…

MFC案例:利用SetTimer函数编写一个“计时器”程序

一、希望达成效果 利用基于对话框的MFC项目&#xff0c;做一个一方面能够显示当前时间&#xff1b;另一方面在点击开始按钮时进行读秒计时&#xff0c;计时结果动态显示&#xff0c;当点击结束时读秒结束并保持最后结果。 二、编程步骤及相关代码、注释 1、启动VS…

OA协同办公系统 iWebPDF插件安装

1、下载压缩文件 iweboffice&#xff0c;并进行解压 链接&#xff1a;https://pan.baidu.com/s/1GQd7000PTZ771ifL5KEflg 提取码&#xff1a;hb56 2、安装iWenpdf2018.exe 3、安装金格中间件外部应用 4、测试了谷歌、360安全&#xff0c;发现安装插件后&#xff0c;只有360极…

BP8519C非隔离降压型恒压芯片

BP8519封装和丝印 BP8519封装和丝印 注意&#xff1a; 该芯片为非隔离ACDC电源芯片&#xff0c;非专业人员请勿使用。专业人员在使用时必须注意防护&#xff0c;避免触电。 非隔离ACDC电源芯片&#xff0c;国内有多家半导体厂商生产&#xff0c;在部分追求低价格的低端仪表、灯…

vivado HW_SIO_GTGROUP、HW_SIO_IBERT

HW_SIO.GTGROUP 描述 GT组与硬件设备上的GT IO组相关&#xff0c;具有可用的数量 GT引脚和组由目标Xilinx FPGA确定。在Kintex-7 xc7k325部件上&#xff0c;用于 例如&#xff0c;有四个GT组&#xff0c;每个组包含四个差分GT引脚对。每个GT pin有自己的接收器hw_sio_rx和发射器…

人工智能GPT-4o?

对比分析 在讨论GPT-4o时&#xff0c;我们首先需要了解其前身&#xff0c;即GPT-4&#xff0c;以及其之前的版本。GPT系列从GPT-1到GPT-4经历了多次迭代&#xff0c;每一次都带来了显著的进步。 GPT-4 vs GPT-4o&#xff1a; 1. **参数规模&#xff1a;** GPT-4o在参数规模上…

PyTorch 张量数据类型

【数据类型】Python 与 PyTorch 常见数据类型对应&#xff1a; 用 a.type() 获取数据类型&#xff0c;用 isinstance(a, 目标类型) 进行类型合法化检测 >>> import torch >>> a torch.randn(2,3) >>> a tensor([[-1.7818, -0.2472, -2.0684],[ 0.…

iOS ------ 对象的本质

一&#xff0c;OC对象本质&#xff0c;用clang编译main.m OC对象结构都是通过基础的C/C结构体实现的&#xff0c;我们通过创建OC文件及对象&#xff0c;将OC对象转化为C文件来探寻OC对象的本质。 代码&#xff1a; interface HTPerson : NSObject property(nonatomic,strong)…