You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

作业求助:树形结构叶子路径提取中如何生成list of lists?

嘿,这个问题其实在树的路径遍历场景里超常见的,完全不用自己从零实现复杂的列表组合逻辑!我给你两种常用的思路,不管你用递归还是迭代,都能轻松搞定这个list of lists的收集~

递归回溯法(最经典的树遍历思路)

这种方法的核心是维护一个「当前路径」的列表,遍历到叶子节点时,把这个路径的独立副本加入结果列表就行。这里的关键是要做回溯——走完一条分支后,把路径里的最后一步删掉,再走另一条分支。

比如用Python实现的话,代码大概是这样的:

def find_leaf_paths(root):
    # 初始化结果列表,用来存所有叶子路径
    result = []
    
    # 定义递归辅助函数,参数是当前节点和当前路径
    def dfs(node, current_path):
        if not node:
            return
        # 遇到叶子节点(左右子节点都为空)
        if not node.left and not node.right:
            # !这里就是你要填的「问号位置」操作:把当前路径的副本加入结果
            result.append(current_path.copy())
            return
        
        # 走左分支,路径加0
        current_path.append(0)
        dfs(node.left, current_path)
        current_path.pop()  # 回溯:退出左分支时,把最后一步删掉
        
        # 走右分支,路径加1
        current_path.append(1)
        dfs(node.right, current_path)
        current_path.pop()  # 回溯:退出右分支时,把最后一步删掉
    
    # 从根节点开始,初始路径为空
    dfs(root, [])
    return result

这里要注意:绝对不能直接把current_path加到result里,因为它是一个列表引用——后续回溯的pop操作会修改它的内容。必须存它的副本(比如copy()或者切片current_path[:]),这样每个叶子的路径都是独立的列表,不会互相干扰。

迭代栈方法(不用递归的实现)

如果你不想用递归,也可以用栈来模拟遍历过程。栈里存「当前节点 + 当前路径」的元组,每次处理节点时,直接生成新的路径列表(不用手动回溯),遇到叶子就把路径加入结果。

代码示例:

def find_leaf_paths(root):
    if not root:
        return []
    
    result = []
    # 栈里初始放根节点和空路径
    stack = [(root, [])]
    
    while stack:
        node, current_path = stack.pop()
        
        # 遇到叶子节点,直接把当前路径加入结果
        if not node.left and not node.right:
            result.append(current_path)
            continue
        
        # 栈是后进先出,所以先压右节点(让左节点先被处理)
        if node.right:
            # 生成新的路径:原路径 + [1],不用修改原路径
            stack.append((node.right, current_path + [1]))
        if node.left:
            # 生成新的路径:原路径 + [0]
            stack.append((node.left, current_path + [0]))
    
    return result

这种方法更直观,因为每次压栈时都是创建一个新的路径列表,完全不用管回溯,每个路径都是独立的,直接收集就行。

总结一下

你根本不需要找什么现成的「组合多个列表」的工具,核心逻辑就是:在遍历到叶子节点时,把当前路径的独立副本收集到结果列表中。不管用递归回溯还是迭代生成新路径,都是围绕这个思路来的,选你觉得符合自己函数结构的方式加代码就行~

内容的提问来源于stack exchange,提问作者Phil Cho

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:31:32