給定乙個二叉搜尋樹, 找到該樹中兩個指定節點的最近公共祖先。
例如,給定如下二叉搜尋樹: 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 為不同節點且均存在於給定的二叉搜尋樹中。
題解:若 root 是 p, q 的 最近公共祖先 ,則只可能為三種情況:
1.p 和 q 在 root 的子樹中,分別在左、右子樹中;
2.p=root ,且 q 在 root 的左或右子樹中;
3.q = root ,且 p在 rootroot 的左或右子樹中;
也就是說
如果 p,q都在root的同一邊,那麼root就肯定不是p,q的最近公共祖先
那麼我們就可以從上到下遍歷二叉搜尋樹了,排除 p,q都在root的同一邊的情況,其餘情況下,root就是p,q的最近公共祖先
**如下:
class solution
while (root != null) else if (root.val < p.val && root.val < q.val) else
}return root;
}}
二叉搜尋樹面試題總結
0.什麼是二叉搜尋樹 二叉搜尋樹就是左子樹所有結點都小於根結點,右子樹所有結點都打於根節點。當然這個定義遞迴的,它的左右子樹也滿足這個特點 例如 0.定義結構typedef int bstdatatype 定義二叉搜尋樹結點型別 typedef struct bstreenode bstreenod...
面試題 04 05 合法二叉搜尋樹
在二叉搜尋樹中 1.若任意結點的左子樹不空,則左子樹上所有結點的值均不大於它的根結點的值。2.若任意結點的右子樹不空,則右子樹上所有結點的值均不小於它的根結點的值。3.任意結點的左 右子樹也分別為二叉搜尋樹。definition for a binary tree node.struct treen...
面試題 04 09 二叉搜尋樹序列
從左向右遍歷乙個陣列,通過不斷將其中的元素插入樹中可以逐步地生成一棵二叉搜尋樹。給定乙個由不同節點組成的二叉樹,輸出所有可能生成此樹的陣列。示例 給定如下二叉樹 2 1 3 返回 2,1,3 2,3,1 不會做,後來看了題解 題目的意思是,按某種順序依次插入所有節點 不能插入已有樹的中間,只能插在最...