[leetcode: Python]235. Lowest Common Ancestor of a BST

来源:互联网 发布:vmware mac 无法上网 编辑:程序博客网 时间:2024/06/14 14:43

题目:
Given a binary search tree (BST), find the lowest common ancestor (LCA) of two given nodes in the BST.

According to the definition of LCA on Wikipedia: “The lowest common ancestor is defined between two nodes v and w as the lowest node in T that has both v and w as descendants (where we allow a node to be a descendant of itself).”

        _______6______       /              \    ___2__          ___8__   /      \        /      \   0      _4       7       9         /  \         3   5

For example, the lowest common ancestor (LCA) of nodes 2 and 8 is 6. Another example is LCA of nodes 2 and 4 is 2, since a node can be a descendant of itself according to the LCA definition.

方法一:性能149ms

# Definition for a binary tree node.# class TreeNode(object):#     def __init__(self, x):#         self.val = x#         self.left = None#         self.right = Noneclass Solution(object):    def lowestCommonAncestor(self, root, p, q):        """        :type root: TreeNode        :type p: TreeNode        :type q: TreeNode        :rtype: TreeNode        """        if root == None:            return None        if p and q:            a = min(p.val, q.val)            b = max(p.val, q.val)            if a == root.val or b == root.val:                return root            if a < root.val and b > root.val:                return root            elif b < root.val:                return self.lowestCommonAncestor(root.left, p, q)            elif a > root.val:                return self.lowestCommonAncestor(root.right, p, q)            elif a == b:                return p

方法二:性能119ms

# Definition for a binary tree node.# class TreeNode(object):#     def __init__(self, x):#         self.val = x#         self.left = None#         self.right = Noneclass Solution(object):    def lowestCommonAncestor(self, root, p, q):        """        :type root: TreeNode        :type p: TreeNode        :type q: TreeNode        :rtype: TreeNode        """        while root:            if root.val > p.val and root.val > q.val:                root = root.left            elif root.val < p.val and root.val < q.val:                root = root.right            else:                return root
0 0
原创粉丝点击