C#
 Computer >> コンピューター >  >> プログラミング >> C#

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

  1. C++で最も近い二分探索木値II

    二分探索木とターゲット値があるとします。そのBSTで、ターゲットに最も近いk個の値を見つける必要があります。目標値は浮動小数点数であることに注意する必要があります。 kは常に有効であり、k≤合計ノードであると想定できます。 したがって、入力が次のような場合 target =3.714286、k =2の場合、出力は[4,3]になります。 これを解決するには、次の手順に従います- 関数pushSmaller()を定義します。これにより、ノード、スタックst、およびターゲットが取得されます。 ノードが存在しない場合は、-を実行します ノードの値が<ターゲットの場合、-

  2. Pythonで二分木がBSTであるかどうかをチェックするプログラム

    二分木があるとしましょう。二分探索木かどうかを確認する必要があります。私たちが知っているように、BSTには次のプロパティがあります- 左側のサブツリーのすべてのノードが現在のノード値よりも小さい 右側のサブツリーのすべてのノードが現在のノード値よりも大きい これらのプロパティは、すべてのノードに対して再帰的に保持されます したがって、入力が次のような場合 その場合、出力はTrueになります これを解決するには、次の手順に従います- x:=ツリー要素の順序どおりの走査シーケンスのリスト xがソートされている場合、 trueを返す falseを返す 理解を深めるために