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

如何使用Python实现非二叉树中从根节点到指定节点的路径查找?问题代码调试

修复非二叉树根到指定节点的路径查找代码

我来帮你拆解原代码的问题并给出可运行的修复方案:

原代码的核心问题

  • 节点结构设计不合理:用up/down/left/right四个单独属性表示子节点,既不符合非二叉树(支持任意子节点数)的逻辑,也会让递归遍历变得混乱
  • 递归返回逻辑错误:同时返回四个递归调用的结果会得到一个无效元组,且没有处理"找不到路径就回溯"的关键逻辑
  • 路径污染问题:当分支找不到目标时,未将当前节点从path中移除,导致路径混入无效节点
  • 空节点处理不当:root is None时给局部变量path赋值为空,无法影响外部传入的路径列表

修复后的代码实现

我们先调整树的结构为通用非二叉树设计(用列表存储任意子节点),再重构路径查找函数加入回溯逻辑:

class Tree:
    def __init__(self, val):
        self.val = val
        self.children = []  # 用列表存储任意数量的子节点,替代原固定属性

def find_path(root, target_val, path=None):
    # 初始化路径,避免多次调用共享同一列表
    if path is None:
        path = []
    
    if root is None:
        return None
    
    # 将当前节点加入路径
    path.append(root.val)
    
    # 找到目标节点,返回路径副本(避免后续回溯修改结果)
    if root.val == target_val:
        return path.copy()
    
    # 遍历所有子节点
    for child in root.children:
        result = find_path(child, target_val, path)
        # 找到有效路径就立即返回
        if result is not None:
            return result
    
    # 所有子分支都找不到,回溯:移除当前节点
    path.pop()
    return None

# 测试用例
if __name__ == "__main__":
    # 构建一棵非二叉树
    root = Tree(1)
    child2 = Tree(2)
    child3 = Tree(3)
    child4 = Tree(4)
    child5 = Tree(5)
    child6 = Tree(6)
    
    root.children = [child2, child3]
    child2.children = [child4]
    child3.children = [child5, child6]
    
    print(find_path(root, 6))  # 输出: [1, 3, 6]
    print(find_path(root, 7))  # 输出: None

关键修复点解释

  1. 树结构优化:用children列表替代固定属性,支持任意数量子节点,符合非二叉树的通用定义
  2. 回溯逻辑:分支找不到目标时用path.pop()移除当前节点,避免路径污染
  3. 路径副本返回:找到目标时返回path.copy(),防止后续回溯修改最终结果
  4. 高效终止逻辑:找到有效路径立即返回,无需遍历其他分支
  5. 安全初始化:用默认参数path=None在函数内初始化,避免多次调用共享路径列表

如果你必须保留原有的up/down/left/right节点结构,只需修改遍历部分:

# 适配原节点结构的遍历方式
for child in [root.up, root.down, root.left, root.right]:
    if child is not None:
        result = find_path(child, target_val, path)
        if result is not None:
            return result

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 14:12:28