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 rootRun Time: 132 ms
No comments:
Post a Comment