找到具有给定值的节点的最短路径 - 二叉树

Finding Shortest Path to Node with Given Value - Binary Tree

给定一个二叉树,我想找到特定值出现的深度。

def find_depth_of_val(self, root, val):
    if not root:
        return 10000000
    if root.val == val:
        return 0
    return 1 + min(self.find_node(root.right, val), self.find_node(root.left, val))

这是我的想法,你可能会看到一个疯狂的“return 10000000”,我曾经这样做过,这样如果特定路径上没有其他东西,即下一个叶子在没有找到我们想要的节点的情况下已经到达,函数知道答案不存在并且没有 return 这种可能性。

我想知道是否有更好的方法来做到这一点,一种不使用随机“return 10000000”的方法。

编辑:有人给了我一个解决方案,我将其更改为:

def find_depth_of_val(self, root, val):
    if not root:
        return None
    if root.val == val:
        return 0
    right_side = self.find_node(root.right, val)
    left_side = self.find_node(root.left, val)
    if right_side is None:
        return left_side
    elif left_side is None:
        return right_side
    else:
        return 1 + min(self.find_node(root.right, val), self.find_node(root.left, val))

在这种情况下,考虑到我们可以 returning None 或整数,我应该如何输入提示? 也就是说,我仍然愿意看看是否有其他人有任何不同的解决方案设计!!

这看起来很奇怪,因为 find_depth_of_val 同时具有 self(一棵树)和 root(另一棵树)作为参数。此外,当您陈述问题时,您只谈论一棵树,而 self 实际上并未在您的方法中使用。

假设您在树中的值是唯一的,这里有一个解决方案。方法 returns None 如果找不到路径或深度。 Optional[int] 表示 intNone:

def find_depth_of_val(self, val: int) -> Optional[int]:
    if self.val == val:
        return 0
    for node in (self.left, self.right):
        if node is not None:
            depth = node.find_depth_of_val(val)
            if depth is not None:
                return depth + 1
    return None