leetcode 235 二叉搜索树最近公共祖先

leetcode 235 二叉搜索树最近公共祖先

题目描述:

给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。

解法一:自己的写法,贼傻

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution(object):
    def lowestCommonAncestor(self, root, p, q):
        """
        :type root: TreeNode
        :type p: TreeNode
        :type q: TreeNode
        :rtype: TreeNode
        """
        def findPath(root,num,tmp,path):
            if not root:
                return
            if root.val == num.val:
                path.append(tmp + [root])
                return
            findPath(root.left,num,tmp+[root],path)
            findPath(root.right,num,tmp+[root],path)
        minn = min(p.val, q.val)
        maxn = max(p.val, q.val)
        p_path = []
        q_path = []
        findPath(root,p,[],p_path)
        findPath(root,q,[],q_path)
        p_path = p_path[0]#[::-1]
        q_path = q_path[0]#[::-1]
        lenm = min(len(p_path),len(q_path))
        for i in range(0,lenm):
            if p_path[i].val == q_path[i].val:
                res = p_path[i]
        return res

网上的写法

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':
        min_ = min(p.val,q.val)
        max_ = max(p.val,q.val)
        if not root:
            return 
        if min_ <= root.val <= max_:
            return root
        else:
            l = self.lowestCommonAncestor(root.left, p, q)
            r = self.lowestCommonAncestor(root.right, p, q)
            if l:
                return l
            if r:
                return r

猜你喜欢

转载自www.cnblogs.com/curtisxiao/p/11247858.html