当前位置: 首页 > news >正文

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

目录

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

二叉树基础

深度和高度

在这里插入图片描述

满二叉树和完全二叉树

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

平衡二叉树

一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1

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

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

二叉树节点定义

class TreeNode:def __init__(self, val, left = None, right = None):self.left = leftself.right = rightself.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 resres = 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 = valself.left = leftself.right = rightself.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 rootwhile len(queue)!=0:size = len(queue)while size != 0:node = queue.popleft()if size == 1:node.next = Noneelse:node_next = queue[0] # 查看队列出队元素node.next = node_nextif node.left is not None:queue.append(node.left)if node.right is not None:queue.append(node.right)size -= 1return root               

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • CTFShow-反序列化
  • QQ频道机器人零基础开发详解(基于QQ官方机器人文档)[第五期]
  • Delphi5利用DLL实现窗体的重用
  • JavaWeb笔记整理——Redis
  • java生成随机数的四种方法
  • wordpress主题摘要调用显示错误解决办法
  • docker镜像源
  • php curl发送get、post请求
  • NET WPF使用组件库HandyControl
  • 【推荐100个unity插件之34】在unity中实现和Live2D虚拟人物的交互——Cubism SDK for Unity
  • mac电脑命令行获取电量
  • oracle 如何查死锁
  • 软件测试之压力测试知识总结
  • Maven 的多种打jar包方式详细介绍、区别及使用教程——附使用命令
  • shell脚本语法
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • [译] React v16.8: 含有Hooks的版本
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • EventListener原理
  • FastReport在线报表设计器工作原理
  • input实现文字超出省略号功能
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • scrapy学习之路4(itemloder的使用)
  • spring + angular 实现导出excel
  • vue 个人积累(使用工具,组件)
  • 从setTimeout-setInterval看JS线程
  • 浮现式设计
  • 规范化安全开发 KOA 手脚架
  • 今年的LC3大会没了?
  • 力扣(LeetCode)357
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 白色的风信子
  • AI算硅基生命吗,为什么?
  • ​如何使用QGIS制作三维建筑
  • !!java web学习笔记(一到五)
  • #if 1...#endif
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • #ubuntu# #git# repository git config --global --add safe.directory
  • (1)(1.13) SiK无线电高级配置(六)
  • (2)MFC+openGL单文档框架glFrame
  • (Java企业 / 公司项目)点赞业务系统设计-批量查询点赞状态(二)
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (二刷)代码随想录第15天|层序遍历 226.翻转二叉树 101.对称二叉树2
  • (十)T检验-第一部分
  • (实战篇)如何缓存数据
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (五)Python 垃圾回收机制
  • (转)GCC在C语言中内嵌汇编 asm __volatile__
  • (转)创业家杂志:UCWEB天使第一步
  • (转)自己动手搭建Nginx+memcache+xdebug+php运行环境绿色版 For windows版
  • *2 echo、printf、mkdir命令的应用
  • .net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别
  • .NET delegate 委托 、 Event 事件,接口回调
  • .NET Framework与.NET Framework SDK有什么不同?