バイナリ検索ツリーの235最低共通の祖先
イージー
二分探索木(BST)を考えると、BSTで与えられた二つのノードの最小の共通祖先(LCA)を見つけます。
よる WikipediaのLCAの定義:「最下位共通祖先は、(我々は、ノードが自身の子孫であることを可能にする)子孫としてpとqの両方を有するTの最下位ノードとして二つのノードのpとqとの間に画定されます。 」
与えられたバイナリ検索ツリー:ルート= [6,2,8,0,4,7,9、NULL、NULL、3,5]
例1:
入力:ルート= [6,2,8,0,4,7,9、NULL、NULL、3,5]、P = 2、Q = 8 出力:6 説明:ノードのLCA2
と8
されています6
。
例2:
入力:ルート= [6,2,8,0,4,7,9、NULL、NULL、3,5]、P = 2、Q = 4 出力:2 説明:ノードのLCA2
と4
なる2
ノードので、 LCA定義に従って自身の子孫であることができます。
注意:
- ノードの値のすべてがユニークになります。
- pおよびqは異なっており、両方の値は、BSTに存在します。
パッケージleetcode.easy。 パブリッククラスLowestCommonAncestorOfABinarySearchTree { 公共のTreeNode lowestCommonAncestor1(ツリーノードのルート、ツリーノードP、ツリーノードQ){ //現在のノードまたは親ノードの値。 int型parentVal = root.val。 Pの値// int型をpVal = p.val。 // Qの値。 int型qVal = q.val。 IF(をpVal> parentVal && qVal> parentVal){ // pとqの両方が親よりも大きい場合には リターンlowestCommonAncestor1(root.right、P、Q)。 }そうであれば(をpVal <parentVal && qVal <parentVal){ // pとqの両方が親よりも少ないであれば リターンlowestCommonAncestor1(root.left、P、Q)。 }他{ //私たちは、LCAのノードすなわち、分割ポイントを発見しました。 }そうであれば(をpVal <parentVal && qVal <parentVal){ ルートを返します。 } } 公共のTreeNode lowestCommonAncestor2(ツリーノードのルート、ツリーノードP、ツリーノードQ){ //のpの値 INTをpVal = p.val。 // Qの値。 int型qVal = q.val。 ツリーのルートノードから//スタート のTreeNodeノード=ルート。 //ツリーをトラバース (ノード!= NULL){ながら 祖先/親ノードの//値。 int型parentVal = node.val。 IF(をpVal> parentVal && qVal> parentVal){ // pとqの両方が親よりも大きい場合 node.rightノード=。 // pとqの両方が、親よりも小さいある場合 node.leftノード=。 }他{ //私たちは、LCAのノードすなわち、分割ポイントを発見しました。 ノードを返します。 } } はnullを返します。 } @ org.junit.Test 公共ボイド試験(){ ツリーノードTN11 =新しいツリーノード(6)。 ツリーノードTN21 =新しいツリーノード(2)。 ツリーノードTN22 =新しいツリーノード(8)。 ツリーノードTN31 =新しいツリーノード(0)。 ツリーノードTN32 =新しいツリーノード(4)。 ツリーノードTN33 =新しいツリーノード(7)。 ツリーノードTN34 =新しいツリーノード(9)。 ツリーノードTN43 =新しいツリーノード(3)。 ツリーノードtn44 =新しいツリーノード(5)。 tn11.left = TN21。 tn11.right = TN22。 tn22.left = TN33。 tn22.right = TN34。 tn21.left = TN31。 tn21.right = TN32。 tn31.left = NULL; tn31.right = NULL; tn32.left = TN43。 tn32.right = tn44。 tn33.left = NULL; tn33.right = NULL; tn34.left = NULL; tn34.right = NULL; tn43.left = NULL; tn44.right = NULL; System.out.println(lowestCommonAncestor1(TN11、TN21、TN22).val)。 System.out.println(lowestCommonAncestor1(TN11、TN21、TN32).val)。 System.out.println(lowestCommonAncestor2(TN11、TN21、TN22).val)。 System.out.println(lowestCommonAncestor2(TN11、TN21、TN32).val)。 } }