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

【二叉树的递归算法与层序遍历算法】

一、递归算法

1、为什么是self.Traversal(root.right) 为什么不是self.Traversal(root.right.val)呢

递归函数要的是“子树根节点”,不是“子树根节点的值”。
值只是用来拼结果列表的,递归还得靠节点本身。

2、那为什么是[root.val]呢

二、层序遍历算法

from collections import deque
from typing import Optional, List# Definition for a binary tree node.
class TreeNode:def __init__(self, val=0, left=None, right=None):self.val = valself.left = leftself.right = rightclass Solution:def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:if root is None:return []q = deque([root])ans = []               # 总答案while q:sz = len(q)level = []         # 当前层结果for _ in range(sz):cur = q.popleft()level.append(cur.val)          # 收集值if cur.left:q.append(cur.left)if cur.right:q.append(cur.right)ans.append(level)  # 把整层放进答案return ans

详细解释

from collections import deque
#引入双端队列,因为后面需要 O(1) 时间 从头部弹出元素;列表 pop(0) 是 O(n)。class Solution:def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
#定义函数,输入是 二叉树根节点,输出是 List[List[int]]
#外层列表代表“层”,内层列表代表“该层从左到右的所有节点值”。if root is None:return []
#空树直接返回空列表,避免后面出现 q.popleft() 对空队列操作。q = deque([root])
#初始化队列,把根节点放进去。此时队列里只有 1 个元素,即第 0 层(第一层)的起点。ans = []
#总答案,将来要返回 [[3], [9,20], [15,7]] 这种格式。while q:
#外层循环:只要队列里还有节点,就说明 尚未遍历完整个树。sz = len(q)
#关键:在进入内层循环之前,先记录 当前队列长度。
#这个长度就是 当前层的节点个数,因为上一轮的循环已经把下一层所有节点都塞进队列了。level = []
#新建一个空列表,用来收集 本层所有节点的值。for _ in range(sz):
#内层循环 恰好执行 sz 次,保证 只处理当前层,不会动到下一层节点。用 _ 表示循环变量本身不会被用到。cur = q.popleft()
#取出队列 最左边 的节点(FIFO)。它一定是当前层 从左往右 的下一个节点。level.append(cur.val)
#把该节点的 值 放进本层列表,注意 不是节点本身,而是 val。if cur.left:  q.append(cur.left)if cur.right: q.append(cur.right)
#只要该节点有左/右孩子,就把孩子 追加到队列尾部。
#这些孩子的 深度比当前层大 1,因此 不会在本次内层循环里被处理,留到下一轮 while 再说。ans.append(level)
#内层循环结束,本层所有值已收集完,把 level 塞进总答案。
#此时队列里只剩 下一层所有节点,下次 while 继续。return ans
#整棵树层序完成,返回 [[layer1], [layer2], ...]。

http://www.dtcms.com/a/461756.html

相关文章:

  • 【STM32】I2C通信—软件模拟
  • 公司网站怎么修改内容wordpress 4.7.2 中文
  • 怎么建手机网站seo新方法
  • 第六章 QT和OPENCV交叉编译开发环境以及QT远程调试
  • hello_mybatis
  • 【大模型理论篇】MCP协议中sse、stdio、streamable_http含义
  • Git 小白超详细指南
  • 深度学习基础:从原理到实践——第二章神经网络(上)
  • 企业网站制作报价单哈尔滨视频剪辑培训机构
  • SOME/IP车载服务的形式化安全分析和防护
  • TCP三次握手与四次挥手状态解析
  • 网站想换空间invoker wordpress
  • Eureka注册中心
  • 网站建设销售总结房屋装修在线设计网站
  • 机器学习基本概念
  • Buffer:Node.js 里处理二进制数据的 “小工具”
  • 网站开发博客大前端d8扁平化wordpress模板
  • Go 语言环境安装指南
  • UiPath2025笔记第六节:java调试API触发器
  • Python实现自动化巡检ESXi6.7并输出excel报告
  • wordpress手机显示不了图片关键词优化计划
  • Python学习之基础篇
  • 手机app开发 网站建设描述网站开发的广告词
  • 24届-Python面经(华为OD)
  • JavaSpring项目之连接,并使用redis
  • 前端核心框架vue之(vue状态核心案例篇4/5)
  • 前端请求优化进阶:并发控制、缓存优化与错误重试实战教程
  • 网站建设的主要特征一个网址需要多少钱
  • 多模态医疗大模型Python编程合规前置化与智能体持续学习研究(上)
  • Transformer 面试题及详细答案120道(71-80)-- 应用场景