例如,給定如下二叉搜尋樹: 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 的最近公共祖先...