面試題68 I 二叉搜尋樹的最近公共祖先

2021-10-05 17:47:17 字數 900 閱讀 9895

給定乙個二叉搜尋樹, 找到該樹中兩個指定節點的最近公共祖先。

例如,給定如下二叉搜尋樹:  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 不會做,後來看了題解 題目的意思是,按某種順序依次插入所有節點 不能插入已有樹的中間,只能插在最...