二叉搜索树最大值

3
我正在尝试查找二叉搜索树中的最大值。给出了样例解决方案,但我想知道我的解决方案是否有问题?我对样例解决方案的问题在于它似乎两次检查每个节点是否为“None”:“if not current.right”和“while current ... current = current.right”,这似乎是多余的。
样例解决方案:
      def find_largest(root_node):
        current = root_node
        while current:
            if not current.right:
                return current.value
            current = current.right

我的解决方案:

      def find_largest(root_node):
        current = root_node
        if current:
            while current.right is not None:
                current = current.right
            return current.value

问题/代码来源:Interviewcake.com

1个回答

2

你的分析是正确的,示例解决方案每个节点检查两次None,而你的解决方案只检查一次,否则它们是等效的。我还想说你的解决方案更易读,但这有点主观。

作为增强功能,你可以通过将函数的参数命名为current而不是root_node来消除函数体中的第一行。这样做还有一个额外的好处,现在参数名称不再暗示只能使用节点作为参数调用函数。实际上,它可以在任何子树中正确找到最大值。


他的if current有什么原因吗?示例没有检查那个。是的,他合并了while和后续的if。所以……一种更快但使用更多内存的方法可能是分配一个last值,然后只需说while current.right last=current.right return last。嗯? - joshstrike
@joshstrike 当然有原因。如果 root_nodeNone(也就是说,我们得到了一棵空树),会发生什么? - kirelagin
1
@joshstrike 不要给别人贴标签或称呼他们的名字,这样做不好。 - Peter Wood
1
@joshstrike 看看这个网站,里面有很多礼貌的帮助者。 - Peter Wood
@PeterWood 感谢您为保持这个网站的礼貌氛围所做出的努力! - randomUser47534

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接