如何获取二叉树深度优先遍历的迭代器并根据树的层数生成深度优先探索步骤列表?
实现二叉树DFS路径序列生成函数
当然可以实现这个需求!你要的其实是模拟二叉树的**深度优先遍历(DFS)**过程,记录每个非根节点的路径选择序列——这里的1代表选择左子节点,0代表选择右子节点,顺序完全遵循DFS「先左深探,再回溯处理右分支」的核心逻辑。
核心思路
我们可以用递归的方式模拟DFS遍历:
- 从根节点的左、右子节点分别开始遍历
- 每到达一个节点,就把当前的路径(从根到该节点的选择序列)加入结果列表
- 如果当前节点还没到最底层,就先递归遍历它的左子节点,回溯后再遍历右子节点
这种方式能完美复现你给出的路径顺序,因为它完全模拟了DFS的遍历流程。
代码实现
def generate_dfs_paths(n): # 少于2层的二叉树没有子节点,返回空列表 if n < 2: return [] result = [] # 路径的最大长度 = 层数 - 1(根是第1层,第k层节点的路径长度为k-1) max_path_length = n - 1 def dfs(current_path, current_length): # 将当前路径加入结果 result.append(current_path.copy()) # 若未到达最大深度,继续递归遍历子节点 if current_length < max_path_length: # 先遍历左子节点(路径追加1) current_path.append(1) dfs(current_path, current_length + 1) current_path.pop() # 回溯,移除最后一个节点选择 # 再遍历右子节点(路径追加0) current_path.append(0) dfs(current_path, current_length + 1) current_path.pop() # 回溯 # 先遍历根节点的左子树路径 dfs([1], 1) # 再遍历根节点的右子树路径 dfs([0], 1) return result
测试验证
当输入层数为4时:
print(generate_dfs_paths(4))
输出结果完全匹配你给出的序列:
[[1], [1,1], [1,1,1], [1,1,0], [1,0], [1,0,1], [1,0,0], [0], [0,1], [0,1,0], [0,1,1], [0,0], [0,0,1], [0,0,0]]
为什么之前的方法不适用?
你尝试的itertools.product会生成所有可能的路径组合,但它的顺序是字典序(比如先列完所有长度为3的路径,再列长度为2的),而我们需要的是DFS遍历的顺序(先深入左分支,再回溯处理右分支,按节点访问顺序记录路径)。这种顺序无法通过简单的组合生成工具直接得到,必须通过模拟DFS的遍历过程来实现。
内容的提问来源于stack exchange,提问作者dank
相关产品推荐
相关产品推荐

