zoukankan      html  css  js  c++  java
  • LeetCode#235 Lowest Common Ancestor of a Binary Search Tree

    Problem Definition:

      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).”

    思路:由根节点开始:

      1) 如果根节点的值等于其中一个节点,则根节点就是要找的最低公共祖先,返回它;

      2) 排序,确保p<=q;

      3) 如果根节点值大于p而小于q,则p和q分别在根节点的左右子树,根节点就是要找的最低公共祖先,返回它;

      4) 如果根节点值大于较大的q,则p和q都在根节点的左子树,令根节点左子节点为新的根节点;如果根节点值小于较小的p,则p和q都在根节点的右子树

        另根节点右子节点为新的根节点;

      5)递归地进行1)-->4).

    代码:

    # Definition for a binary tree node.
    # class TreeNode:
    #     def __init__(self, x):
    #         self.val = x
    #         self.left = None
    #         self.right = None
    
    class Solution:
        # @param {TreeNode} root
        # @param {TreeNode} p
        # @param {TreeNode} q
        # @return {TreeNode}
        def lowestCommonAncestor(self, root, p, q):
            if (root.val==p.val) or (root.val==q.val):
                return root
            if p.val>q.val:
                p,q=q,p
            if p.val<root.val and root.val<q.val:
                return root
            if root.val>q.val:
                root=root.left
            if root.val<p.val:
                root=root.right
            if root!=None:
                return self.lowestCommonAncestor(root, p, q)
            
                

      

  • 相关阅读:
    指针如何影响结构体,细节的思考
    【转】oracle null
    【转】JavaScript闭包
    【转】Ext JS xtype
    【转】EXT JS MVC开发模式
    【转】Ext.ajax.request 中的success和failure
    【转】Oracle job procedure 存储过程定时任务
    JDK重要包和Java学习方法论
    rownum
    【转】Js获取当前日期时间及格式化操作
  • 原文地址:https://www.cnblogs.com/acetseng/p/4648741.html
Copyright © 2011-2022 走看看