代码随想录算法训练营第13天|二叉树基础知识、递归遍历、迭代遍历、层序遍历、116. 填充每个节点的下一个右侧节点指针

news2024/11/15 2:16:08

目录

  • 二叉树基础
    • 深度和高度
    • 满二叉树和完全二叉树
    • 二叉搜索树和平衡二叉搜索树
    • 二叉树节点定义
    • 前中后序遍历
  • 递归遍历
    • 前序递归遍历—144. 二叉树的前序遍历
  • 迭代遍历
  • 层序遍历
  • 116. 填充每个节点的下一个右侧节点指针
    • 1、题目描述
    • 2、思路
    • 3、code

二叉树基础

深度和高度

在这里插入图片描述

满二叉树和完全二叉树

满二叉树:除了根节点,每个节点都有两个孩子
完全二叉树:除了最底下的右侧节点可能没填满外,其余每层节点数都达到最大值。

二叉搜索树和平衡二叉搜索树

二叉搜索树:左节点小于根节点,有节点大于根节点
平衡二叉搜索树:在二叉搜索树的基础上,左右两个子树的高度差的不超过1

二叉树节点定义

class TreeNode:
	def __init__(self, val, left = None, right = None):
		self.left = left
		self.right = right
		self.val = val

前中后序遍历

  • 前序遍历:中左右
  • 中序遍历:左中右
  • 后序遍历:左右中
    在这里插入图片描述

递归遍历

前序递归遍历—144. 二叉树的前序遍历

题目链接:添加链接描述
在这里插入图片描述

class Solution:
    def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
        def dfs(node,res):
            if node == None:
                return 
            # 前序:中左右
            res.append(node.val)
            dfs(node.left,res)
            dfs(node.right,res)
            return res
        res = dfs(root,[])
        return res

迭代遍历

前序遍历是中左右,每次先处理的是中间节点,再处理左节点,最后右节点

设计一个栈:先将根节点放入栈中,然后将右孩子加入栈,再加入左孩子

Q:为什么要先加入 右孩子,再加入左孩子呢?

A:因为这样出栈的时候才是中左右的顺序

thon
class Solution:
    def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
        # 前序遍历:中左右
        # 迭代法:使用栈
        if not root:
            return []
        stack = []
        vec = []
        # 先把根节点压入栈中
        stack.append(root)
        while len(stack) != 0:
            # 先弹出栈首
            node = stack.pop()
            # 把栈首弹出节点的val记录到vec中
            vec.append(node.val)
            # 然后压入此时栈首的左右孩子
            # 要先压入右孩子,才能先弹出左孩子
            if node.right:
                stack.append(node.right)
            if node.left:
                stack.append(node.left)
        return vec

层序遍历

在这里插入图片描述
在这里插入图片描述

116. 填充每个节点的下一个右侧节点指针

题目链接:

1、题目描述

在这里插入图片描述输入:root = [1,2,3,4,5,6,7]
输出:[1,#,2,3,#,4,5,6,7,#]
解释:给定二叉树如图 A 所示,你的函数应该填充它的每个 next 指针,以指向其下一个右侧节点,如图 B 所示。序列化的输出按层序遍历排列,同一层节点由 next 指针连接,‘#’ 标志着每一层的结束。

2、思路

层序遍历

3、code

"""
# Definition for a Node.
class Node:
    def __init__(self, val: int = 0, left: 'Node' = None, right: 'Node' = None, next: 'Node' = None):
        self.val = val
        self.left = left
        self.right = right
        self.next = next
"""
from collections import deque
class Solution:
    def connect(self, root: 'Optional[Node]') -> 'Optional[Node]':
        queue = deque()
        if root != None:
            queue.append(root)
        else:
            return root
        while len(queue)!=0:
            size = len(queue)
            while size != 0:
                node = queue.popleft()
                if size == 1:
                    node.next = None
                else:
                    node_next = queue[0] # 查看队列出队元素
                    node.next = node_next
                if node.left is not None:
                    queue.append(node.left)
                if node.right is not None:
                    queue.append(node.right)
                size -= 1
        return root               

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

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

相关文章

有JavaScript动态加载的内容如何抓取

引言 JavaScript动态加载的内容常见于现代Web应用中,用于增强用户体验和减少初始页面加载时间。然而,这些动态加载的内容对于传统的网页抓取工具来说往往是不可见的,因为它们不包含在初始的HTML响应中。为了抓取这些内容,我们需要…

Java项目: 基于SpringBoot+mybatis+maven星之语明星周边产品销售网站(含源码+数据库+毕业论文)

一、项目简介 本项目是一套基于SpringBootmybatismaven星之语明星周边产品销售网站 包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试,eclipse或者idea 确保可以运行! 该系统功能完善、界面美…

计算机中的浮点数(二)

IEEE 754-2008 标准(二进制) 计算机中的浮点数(一)-CSDN博客文章浏览阅读188次,点赞12次,收藏12次。这篇文章介绍了计算机系统中浮点数的正式定义,关于浮点数的介绍总共分两篇文章,这是第一篇。https://blog.csdn.net/daduzimama/…

动手学深度学习(pytorch)学习记录30-含并行连接的网络(GoogLeNet)[学习记录]

目录 GoogLeNetInception块GoogLeNet模型训练模型 GoogLeNet GoogLeNet,也称为Inception v1,是由Google团队在2014年提出的深度学习模型,它在当年的ImageNet竞赛中取得了显著的成绩。GoogLeNet的设计引入了多个创新点,包括Incept…

Spring Boot实战-文章管理系统(1.用户相关接口)

一、用户相关接口 1.注解 RestController:是一个组合注解,它结合了 Controller 和 ResponseBody 注解的功能(就相当于把两个注解组合在一起)。 在使用 RestController 注解标记的类中,每个方法的返回值都会以 JSON 或…

【数据结构】带你初步了解排序算法

文章目录 1. 排序的概念及运用1.1 概念1.2 运用 2. 常见的排序算法2.1 插入排序2.1.1 直接插入排序(简单插入排序)2.1.2 希尔排序 2.2 选择排序2.2.1 直接选择排序(简单选择排序)2.2.2 堆排序 2.3 交换排序2.3.1 冒泡排序2.3.2 快…

python | 2行命令解决pip模块不存在问题

一、报错情况 有时,在执行 pip 更新命令后,会提示更新失败或错误警告。 报错提示如下: 然后,再次使用 pip 安装命令时,会提示 pip 模块找不到或不存在: ModuleNotFoundError: No module named pip 导致…

在线IP代理检测:保护您的网络安全

在互联网飞速发展的今天,越来越多的人开始意识到网络安全和隐私保护的重要性。在线IP代理检测工具作为一种有效的网络安全手段,能够帮助用户识别和检测IP代理的使用情况,从而更好地保护个人隐私和数据安全。本文将详细介绍在线IP代理检测的相…

SQL数据库(MySQL)

一、在Ubuntu系统下安装MySQL数据库 1、更新软件源,在确保ubuntu系统能正常上网的情况下执行以下命令 sudo apt-get update 2、安装MySQL数据库及相关软件包 # 安装过程中设置root用户的密码 123456 sudo apt-get install mysql-server ​ # 安装访问数据库的客…

Rsync——远程同步

目录 一、rsync远程同步概述 1、rsync 简介 2、rsync的同步方式 3、rsync的备份方式 4、rsync与cp、scp对比 二、常用rsync命令 1、基本格式 2、配置源的两种表达方法 三、搭建rsync下行同步 1、搭建环境 2、配置rsync源服务器(172.16.88.44)…

出版学术专著需要具备哪些条件?

出版学术专著通常需要具备以下条件: 一、学术价值 1. 创新性 - 你的专著应在研究主题、方法、观点等方面具有一定的创新性。这可以是提出新的理论框架、发现新的现象、采用新的研究方法或对已有理论进行新的阐释和拓展。 - 例如,在某一特定学科领域中&…

【北京迅为】《STM32MP157开发板使用手册》- 第二十七章Cortex-M4按键实验

iTOP-STM32MP157开发板采用ST推出的双核cortex-A7单核cortex-M4异构处理器,既可用Linux、又可以用于STM32单片机开发。开发板采用核心板底板结构,主频650M、1G内存、8G存储,核心板采用工业级板对板连接器,高可靠,牢固耐…

跟《经济学人》学英文:2024年09月07日这期 What to read about the British economy

What to read about the British economy Britain used to be the world’s richest country. These six books explain how it came to be, and why it is no longer 原文: IN RECENT YEARS the British economy has tended to be in the news for the wrong re…

凯伦股份融合®️TMP复合瓦系统实力硬扛摩羯台风

第11号台风“摩羯”,今年以来登陆我国的最强台风,也是继2014年“威马逊”之后登陆我国的最强台风。 沿海多地发布防风Ⅰ级应急响应,多市启动落实“六停”措施。面对17级台风,工商业厂房遭受严重的破坏。据前方报道,当地…

Vue实用操作篇-1-第一个 Vue 程序

安装 Vue 非常的简便&#xff0c;只需下载好 Vue 对应的 .js 文件&#xff0c;在 html 中引入 vue.js 即可使用 Vue 下载好了 vue.js 我们便可以编写我们的第一个 vue 程序了 <!doctype html> <html lang"zh-CN"><head><meta charset"utf…

【数据结构】十大经典排序算法总结与分析

文章目录 前言1. 十大经典排序算法分类2. 相关概念3. 十大经典算法总结4. 补充内容4.1 比较排序和非比较排序的区别4.2 稳定的算法就真的稳定了吗&#xff1f;4.3 稳定的意义4.4 时间复杂度的补充4.5 空间复杂度补充 结语 前言 排序算法是《数据结构与算法》中最基本的算法之一…

计算机视觉(一)—— 特刊推荐

特刊征稿 01 期刊名称&#xff1a; Computer Vision for Smart Cities 截止时间&#xff1a; 提交截止日期&#xff1a;2024 年 12 月 31 日 目标及范围&#xff1a; 以下是一些潜在的主题&#xff1a; 城市交通和交通管理&#xff1a; • 车辆检测和跟踪以实现高效的交通流…

相机SD卡删除的照片可以恢复吗?6个方法,快速找回删除照片!

相机SD卡的照片在相机中误删了&#xff0c;有什么恢复办法吗&#xff1f;今天我要和大家分享一些关于如何恢复相机SD卡中删除的照片的方法。相信很多摄影爱好者都遇到过不小心删除了重要照片的情况&#xff0c;这时候我们该怎么办呢&#xff1f;别担心&#xff0c;下面我将为大…

野兔在线工具箱系统(市面上最强最多)最新版本更新2024.9

野兔在线工具箱系统&#xff0c;采用最新ThinkPHP8框架开发完成&#xff0c;也是基于YETUADMIN开发的工具箱系统&#xff0c;这次野兔在线工具系统更新&#xff0c;更新了几个新的功能模块&#xff0c;和已知的问题&#xff0c;修复系统部分功能。 程序开发 程序名称&#xf…

【生产力必备工具】GPU加速计算的首选云服务——蓝耘GPU(点击我的链接注册登录,可获50使用卷)

点击下面我的链接注册并登录&#xff0c;可获50使用卷&#xff1a;https://cloud.lanyun.net/#/registerPage?promoterCode11f606c51ehttps://cloud.lanyun.net/#/registerPage?promoterCode11f606c51e获得广泛丰富的NVIDIA高端GPU选择。高可配置高可用&#xff0c;专为大规模…