[Swift]LeetCode235. 二叉搜索樹的最近公共祖先 | Lowest Common Ancestor of a Binary Search Tree

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公衆號:山青詠芝(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

  • All of the nodes' values will be unique.
  • p and q are different and both values will exist in the BST.

給定一個二叉搜索樹, 找到該樹中兩個指定節點的最近公共祖先。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

 

說明:

  • 全部節點的值都是惟一的。
  • p、q 爲不一樣節點且均存在於給定的二叉搜索樹中。

遞歸

 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 }
相關文章
相關標籤/搜索