为什么二叉树预遍历遍历不返回

问题描述 投票:0回答:1

嗨,我正在尝试解决leetcode问题1379

这里是问题的陈述+链接:

https://leetcode.com/problems/find-a-corresponding-node-of-a-binary-tree-in-a-clone-of-that-tree/

Problem

这是我尝试解决问题的失败:

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def getTargetCopy(self, original: TreeNode, cloned: TreeNode, target: TreeNode) -> TreeNode:
        if cloned:
            if cloned.val == target.val:
                return cloned
            self.getTargetCopy(original, cloned.left, target)
            self.getTargetCopy(original, cloned.right, target)

我无法理解为什么这不起作用。

我认为我的解决方案是对树进行预遍历,并在每个阶段询问克隆树中的节点是否存在,如果存在,它的值是否等于我们要寻找的值?如果是,则返回该节点,我们已经找到了我们要寻找的节点。

如果不检查则简单地进行检查树。由于树中的值保证是唯一的,并且目标值必须保证在树中,所以我要访问每个节点,因此肯定可以在找到答案时起作用。

但是它没有通过自动测试,它甚至没有通过示例1(如上图所示,并说它正在返回null

我想念什么?

python-3.x algorithm tree binary-tree traversal
1个回答
0
投票

if条件不成立时,您不会return任何东西。

因此更改这两行:

        self.getTargetCopy(original, cloned.left, target)
        self.getTargetCopy(original, cloned.right, target)

收件人:

        res = self.getTargetCopy(original, cloned.left, target)
        if res:
            return res
        return self.getTargetCopy(original, cloned.right, target)
© www.soinside.com 2019 - 2024. All rights reserved.