★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公衆號:山青詠芝(shanqingyongzhi)
➤博客園地址:山青詠芝(https://www.cnblogs.com/strengthen/)
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:http://www.javashuo.com/article/p-autlmsoq-mc.html
➤若是連接不是山青詠芝的博客園地址,則多是爬取做者的文章。
➤原文已修改更新!強烈建議點擊原文地址閱讀!支持做者!支持原創!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★html
Given a binary search tree (BST), find the lowest common ancestor (LCA) of two given nodes in the BST.node
According to the definition of LCA on Wikipedia: 「The lowest common ancestor is defined between two nodes p and q as the lowest node in T that has both p and q as descendants (where we allow a node to be a descendant of itself).」git
Given binary search tree: root = [6,2,8,0,4,7,9,null,null,3,5]github
Example 1:微信
Input: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 8 Output: 6 Explanation: The LCA of nodes and is . 286
Example 2:spa
Input: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 4 Output: 2 Explanation: The LCA of nodes and is , since a node can be a descendant of itself according to the LCA definition. 242
Note:code
給定一個二叉搜索樹, 找到該樹中兩個指定節點的最近公共祖先。htm
百度百科中最近公共祖先的定義爲:「對於有根樹 T 的兩個結點 p、q,最近公共祖先表示爲一個結點 x,知足 x 是 p、q 的祖先且 x 的深度儘量大(一個節點也能夠是它本身的祖先)。」blog
例如,給定以下二叉搜索樹: root = [6,2,8,0,4,7,9,null,null,3,5]遞歸
示例 1:
輸入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 8 輸出: 6 解釋: 節點 和節點 的最近公共祖先是 286。
示例 2:
輸入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 4 輸出: 2 解釋: 節點 和節點 的最近公共祖先是 , 由於根據定義最近公共祖先節點能夠爲節點自己。242
說明:
遞歸
1 /** 2 * Definition for a binary tree node. 3 * public class TreeNode { 4 * public var val: Int 5 * public var left: TreeNode? 6 * public var right: TreeNode? 7 * public init(_ val: Int) { 8 * self.val = val 9 * self.left = nil 10 * self.right = nil 11 * } 12 * } 13 */ 14 class Solution { 15 func lowestCommonAncestor(_ root: TreeNode?, _ p: TreeNode?,_ q: TreeNode?) -> TreeNode? { 16 if root == nil {return nil} 17 if root!.val > max(p!.val,q!.val) 18 { 19 return lowestCommonAncestor(root!.left, p, q) 20 } 21 else if root!.val < min(p!.val, q!.val) 22 { 23 return lowestCommonAncestor(root!.right, p, q) 24 } 25 else 26 { 27 return root 28 } 29 } 30 }