LeetCode_235。バイナリ検索ツリーの最低共通の祖先

 

バイナリ検索ツリーの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 
説明:ノードのLCA 28されています6

例2:

入力:ルート= [6,2,8,0,4,7,9、NULL、NULL、3,5]、P = 2、Q = 4 
出力:2 
説明:ノードのLCA 24なる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)。
	} 
}

 

おすすめ

転載: www.cnblogs.com/denggelin/p/11748247.html