Because BST is a knid of binary tree, so if we use the result of binary tree, it is also correct but not that fast.
If we use BST's feature, the thing is clear: when the three nodes are on the same tree, there should be
s <= root.val <= b. If not, the two nodes must be on left or right subtree, then use the value to decide go left or right.
Solution:
# T:O(n) S:O(1)
class Solution(object):
def lowestCommonAncestor(self, root, p, q):
"""
:type root: TreeNode
:type p: TreeNode
:type q: TreeNode
:rtype: TreeNode
"""
s, b = sorted([p.val, q.val])
while not s <= root.val <= b:
# Keep searching since root is outside of [s, b].
root = root.left if s <= root.val else root.right
# s <= root.val <= b.
return root
Run Time: 132 ms
No comments:
Post a Comment