C#の再帰を使用して、バイナリツリーが有効なバイナリ検索ツリーであるかどうかを確認するにはどうすればよいですか?
ツリーは、すべての左の子がノード要素よりも小さく、すべての右の子がノード要素よりも大きい場合、二分探索木です。最初に、ノードに値があるかどうかを確認します。ノードがnullの場合、有効な二分探索木と見なしてtrueを返します。ノードのnull結果を確認した後、ノード、最小値、および最大値を渡すことにより、再帰メソッドisValidBSTを呼び出します。ルート値がmin未満で、ルート値がmaxより大きい場合、バイナリ検索ツリーではないと見なされ、falseが返されます。それ以外の場合は、すべてのノードをチェックするまで左右の値を渡すことにより、isValidBSTメソッドを再帰的に呼び出します。
例
public class TreesPgm{ public class Node{ public int Value; public Node LeftChild; public Node RightChild; public Node(int value){ this.Value = value; } public override String ToString(){ return "Node=" + Value; } } public bool isValidBST(Node root){ if (root == null){ return true; } return isValidBST(root, int.MinValue, int.MaxValue); } private bool isValidBST(Node root, int min, int max){ if (root == null){ return true; } if (root.Value <= min || root.Value >= max){ return false; } return isValidBST(root.LeftChild, min, root.Value) && isValidBST(root.RightChild, root.Value, max); } }
入力
5 2 6 1 3
出力
True
-
C++で最も近い二分探索木値II
二分探索木とターゲット値があるとします。そのBSTで、ターゲットに最も近いk個の値を見つける必要があります。目標値は浮動小数点数であることに注意する必要があります。 kは常に有効であり、k≤合計ノードであると想定できます。 したがって、入力が次のような場合 target =3.714286、k =2の場合、出力は[4,3]になります。 これを解決するには、次の手順に従います- 関数pushSmaller()を定義します。これにより、ノード、スタックst、およびターゲットが取得されます。 ノードが存在しない場合は、-を実行します ノードの値が<ターゲットの場合、-
-
Pythonで二分木がBSTであるかどうかをチェックするプログラム
二分木があるとしましょう。二分探索木かどうかを確認する必要があります。私たちが知っているように、BSTには次のプロパティがあります- 左側のサブツリーのすべてのノードが現在のノード値よりも小さい 右側のサブツリーのすべてのノードが現在のノード値よりも大きい これらのプロパティは、すべてのノードに対して再帰的に保持されます したがって、入力が次のような場合 その場合、出力はTrueになります これを解決するには、次の手順に従います- x:=ツリー要素の順序どおりの走査シーケンスのリスト xがソートされている場合、 trueを返す falseを返す 理解を深めるために