二叉搜尋樹的最近公共祖先

2021-10-12 04:52:22 字數 1568 閱讀 6586

例如,給定如下二叉搜尋樹:  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

解釋: 節點 2 和節點 8 的最近公共祖先是 6。

示例 2:

輸入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 4

輸出: 2

解釋: 節點 2 和節點 4 的最近公共祖先是 2, 因為根據定義最近公共祖先節點可以為節點本身。

說明:所有節點的值都是唯一的。

p、q 為不同節點且均存在於給定的二叉搜尋樹中。

說明:所有節點的值都是唯一的。

p、q 為不同節點且均存在於給定的二叉搜尋樹中。

2.1  思路分析根據二叉搜尋樹的特點,①設root為根節點,則它與左右的子樹的值的關係滿足:root.right.val > root.val > root.left.val,②沒有重複元素;

那麼這道題,我們得確定節點p、q和root的位置關係是怎麼樣的?

①p.val > root.val 且 q.val > root.val,這說明,節點p、q都在root的右子樹;

②p.val < root.val 且 q.val < root.val,這說明節點p、q都在root的左子樹;

③root.val == p ,那麼不管q在哪,p,q的公共祖先都是當前root(p),root.val == q也同理;

④p.val > root.val 且 q.val < root.val 或 p.val < root.val 且 q.val > root.val時,說明p,q分別在root的左子樹或右子樹,它們的公共祖先即為root; 

2.2  **實現

/**

* definition for a binary tree node.

* public class treenode

* }*/class solution else if(p.val < root.val && q.val < root.val) else

}return root;}}

2.3  複雜度分析3.1  思路分析根據迭代法的思路,在這裡節點p、q都在右子樹則遞迴右子樹,若都在左子樹,遞迴左子樹,最後返回root;

3.2  **實現

class solution 

if(p.val < root.val && q.val < root.val)

return root;}}

3.3  複雜度分析

二叉搜尋樹的最近公共祖先

給定乙個二叉搜尋樹,找到該樹中兩個指定節點的最近公共祖先。例如,給定如下二叉搜尋樹 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 解釋 節點 2 和節點 8 的最近公共祖先...

二叉搜尋樹的最近公共祖先

給定乙個二叉搜尋樹,找到該樹中兩個指定節點的最近公共祖先。例如,給定如下二叉搜尋樹 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 解釋 節點 2 和節點 8 的最近公共祖先...

二叉搜尋樹的最近公共祖先

給定乙個二叉搜尋樹,找到該樹中兩個指定節點的最近公共祖先。例如,給定如下二叉搜尋樹 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 解釋 節點 2 和節點 8 的最近公共祖先...