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

2021-10-01 20:32:46 字數 1153 閱讀 1757

描述:給定乙個二叉搜尋樹,找到該樹中兩個指定節點的最近公共節點(最近公共祖先節點可以為節點本身)

說明:所有節點的值都是唯一的。兩個節點為不同節點且存在於給定的二叉搜尋樹。

首先複習一下二叉搜尋樹的性質:

左子樹上所有節點的值都小於等於根節點的值

右子樹上所有節點的值都大於等於根節點的值

左子樹和右子樹也都是二叉搜尋樹

方法一:遞迴

從根節點開始遍歷樹

如果節點p和節點q都在右子樹上,那麼以右孩子為根節點繼續1的操作

如果節點p和節點q都在左子樹上,那麼以左孩子為根節點繼續1的操作

如果條件2和條件3都不成立,這意味著已經找到節點p和節點q的公共祖先了。

public treenode lowestcommonancestor(treenode root, treenode p, treenode q)  else if (pval < parentval && qval < parentval)  else 

}

遞迴演算法是大家最熟悉的演算法,也是第一時間想到的解決辦法,下面介紹另外一種更加快捷方便的演算法。

方法二:清新腦迴路

由二叉搜尋樹的特性可以知道,如果兩個節點剛好位於左右子樹,那麼用根節點減去左子樹乘以根節點減去右子樹的乘積是小於等於0;所以由此特性可以寫出更巧妙的演算法:

public class lowestcommonancestor_235 

private static void lca(treenode root, treenode p, treenode q) else if (root.val < p.val && root.val < q.val) else

}public static void main(string args)

}

以上就是該演算法的全部輸出,有木有乾貨滿滿的樣子。

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

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

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

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

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

這裡的思路其實跟二叉樹找最近公共祖先一樣,唯一不同是二叉搜尋樹是已經有序的了。也就是左子樹一定會小於樹節點,右子樹一定會小於樹節點,所以我們可以直接判斷p q的位置,減少遍歷。public treenode lowestcommonancestor treenode root,treenode p,...