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

2025/09/05 N叉树的后序,中序遍历

590. N 叉树的后序遍历 - 力扣(LeetCode)

递归写法:

写法1:标准 DFS + extend 收集结果

class Solution: def postorder(self, root: 'Node') -> List[int]: if not root: return []result = [] for child in root.children:result.extend(self.postorder(child))result.append(root.val) return result

知识点:

①extend函数

extend() 是 Python list 的一个方法,用来将一个可迭代对象中的元素逐个添加到列表的末尾

(a)和 append() 的区别

操作 含义 结果
append(x) x 作为一个整体元素加进列表 列表长度增加 1,添加的是对象本身
extend(iterable) iterable每个元素加进列表 列表长度增加 len(iterable) 个元素
a = [1, 2]
b = [3, 4]a.append(b)
print(a)        # 👉 [1, 2, [3, 4]]     ⛔ 多了一层嵌套

a = [1, 2]
a.extend(b)
print(a)        # 👉 [1, 2, 3, 4]       ✅ 平铺展开

append() 是整体添加(会嵌套)

extend() 是平铺展开(逐个加)

(b)支持哪些类型?

只要是可迭代对象,都可以用 extend()

a = [1, 2]
a.extend((3, 4))       # ✅ 元组
a.extend({5, 6})       # ✅ 集合(无序)
a.extend("78")         # ✅ 字符串会被逐字符拆分
a.extend(range(2))     # ✅ rangeprint(a)  # 结果可能是 [1, 2, 3, 4, 5, 6, '7', '8', 0, 1]

(c)常见用法

1️⃣ 合并两个列表(推荐用 extend()

a = [1, 2]
b = [3, 4]
a.extend(b)  # ✅ 比 a = a + b 更快(原地修改)

2️⃣ 递归遍历中收集子结果

for child in root.children:result.extend(self.postorder(child))
  • 每个子节点的遍历结果是一个 List

  • extend() 把这些子结果合并成一个完整结果

(d)注意:

extend() 是就地修改,返回 None;所以不要写 a = a.extend(b);

字符串会被按字符拆分,extend("abc") → ['a', 'b', 'c']

(e)易错

a = [1, 2]
a.extend([[3, 4]])
print(a)  # ❓输出是什么?# 👉 答案:[1, 2, [3, 4]],因为传的是包含列表的列表

 

写法2:写dfs函数

class Solution: def postorder(self, root: 'Node') -> List[int]: result = []def dfs(node):if not node:returnfor child in node.children:dfs(child)result.append(node.val)dfs(root)return result

 

 

589. N 叉树的前序遍历 - 力扣(LeetCode)

递归写法:

写法1:标准 DFS + extend 收集结果(「返回值式递归 + extend 合并结果」)

class Solution:def preorder(self, root: 'Node') -> List[int]:if not root:return []result = []result.append(root.val)for child in root.children:result.extend(self.preorder(child))return result

每个递归函数 postorder(child) 会返回一个 新的列表(返回子树结果),所以要用 extend() 把它们“拼”在一起;

每次 result.extend(...) 拼接构建结果,导致效率较低(频繁拼接、创建新列表);

创建了很多中间列表(每次递归返回一个新列表),对于大树可能有性能问题(尤其是深度大 or 子树多);

结构更函数式、递归风格:写法短、递归思维清晰。

写法2:写dfs函数(「过程式递归 + 外部累加结果」)

"""
# Definition for a Node.
class Node:def __init__(self, val: Optional[int] = None, children: Optional[List['Node']] = None):self.val = valself.children = children
"""class Solution:def preorder(self, root: 'Node') -> List[int]:result = []def dfs(node):if not node:returnresult.append(node.val)for child in node.children:dfs(child)dfs(root)return result

递归函数无返回值,直接修改result;

所有子树的递归过程,都共享同一个 result,直接在遍历过程中 append,不返回中间列表,更贴近真实 DFS

优点:效率高,只构造一个列表,没有中间拼接;控制力强,方便加各种逻辑(比如层数、路径等)

缺点:result 是外部变量,不是纯函数式(副作用略多);不适合做成模块复用(比如要写一个纯粹的递归函数库)

http://www.sczhlp.com/news/71328/

相关文章:

  • window 部署主从mysql
  • 上海哪里做网站手机网站模板html5
  • 长春网站推广优化寿光网站建设推广
  • 全国网站排名爬虫 网站开发实例
  • 阿里云搭建网站精致网站赏析
  • 企业公司网站模板下载有限公司和股份有限公司的区别
  • 南京seo网站建设费用网页设计的标准尺寸一般有哪些
  • 网站设计 手写宁津哪个网络公司做网站比较好
  • iis如何做网站管理器wordpress内容采集
  • 网站没有备案会怎么样兰州网站排名外包
  • 网站建设费开票税收代码微信开发网站开发
  • 网站代码管理推广营销外包
  • 点图片跳到网站怎么做网站后台制作这么做
  • XCPC 训练
  • Argo CD 与 Kubernetes 资源关系简述
  • BUUCTF堆题
  • 网页制作与网站建设实战大全读后感项目管理软件哪个好
  • 百度搜索引擎网站上海装修公司排名2021
  • 网站规划的步2007年怎么做网站
  • 说明怎样做才能通过互联网访问你制作的网站可信的大连网站建设
  • 安阳做推广网站自媒体平台哪家好
  • 哪家公司建设网站企业网站建设可行性分析
  • asp网站500错误移动互联网开发的关注点
  • 关键词搜索引擎网站网页设计报告总结200字
  • 用凡科帮别人做网站网站建设的含义
  • 2025-09-05 12:11:27 我的博客找回来了
  • 网站英文版怎么做学设计需要哪些软件
  • 电商网站制作小程序制作需要什么技术
  • html5网站建设网站搭建类型
  • 无证做音频网站违法吗小白学做网站教程