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

特定の二分木が完全な二分木であるかどうかをチェックするC++プログラム


二分木が与えられた場合、タスクはそれが完全な二分木であるかどうかを確認することです。すべてのノードに0個または2個の子がある場合、バイナリツリーは完全なバイナリツリーであると言われます。

入力-1

特定の二分木が完全な二分木であるかどうかをチェックするC++プログラム

出力:

1

説明: リーフノードを除くすべてのノードには2つの子があるため、完全な二分木です。

入力-2:

特定の二分木が完全な二分木であるかどうかをチェックするC++プログラム

出力:

0

説明: ノード2には子が1つしかないため、完全な二分木ではありません。

この問題を解決するためのアプローチ

特定の二分木がいっぱいかどうかを確認するために、左側のサブツリーと右側のサブツリーを再帰的に確認できます。

  • ノードとその子を持つ特定の二分木を入力します。
  • ブール関数isFullBinaryTree(Node * root)は、ルートノードを入力として受け取り、完全な二分木である場合はTrueを返し、そうでない場合はfalseを返します。
  • 基本条件で、ルートノードがNULLまたは空の場合、Trueを返します。
  • 左側のサブツリーと右側のサブツリーがNULLまたは空の場合は、Trueを返します。
  • 次に、左側のサブツリーと右側のサブツリーのそれぞれを再帰的にチェックして、出力を返します。

#include<iostream>
using namespace std;
struct treenode {
   int data;
   treenode * left;
   treenode * right;
};
struct treenode * createNode(int d) {
   struct treenode * root = new treenode;
   root -> data = d;
   root -> left = NULL;
   root -> right = NULL;
   return root;
}
bool isFullBinaryTree(struct treenode * root) {
   if (root == NULL) {
      return true;
   }
   if (root -> left == NULL and root -> right == NULL) {
      return true;
   } else if (root -> left and root -> right) {
      return (isFullBinaryTree(root -> left) and isFullBinaryTree(root -> right));
   }
   return false;
}
int main() {
   struct treenode * root = NULL;
   root = createNode(1);
   root -> left = createNode(2);
   root -> right = createNode(3);
   root -> left -> right = createNode(4);
   root -> left -> left = createNode(5);
   root -> right -> left = createNode(6);
   if (isFullBinaryTree(root)) {
      cout << "1" << endl;
   } else {
      cout << "0" << endl;
   }
   return 0;
}

上記のコードを実行すると、次のように出力が生成されます

出力

0

説明: 指定されたバイナリツリーのすべてのリーフノードには子ノードがないため、完全なバイナリツリーではありません。したがって、出力は0になります。


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

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

  2. Pythonで二分木が完成しているかどうかをチェックするプログラム

    二分木があるとしましょう。これが完全な二分木であるかどうかを確認する必要があります。完全な二分木でわかっているように、レベルはノードで埋められますが、最後のレベルのノードと最後のレベルのすべてのノードが可能な限り左にある可能性があります。 したがって、入力が次のような場合 その場合、出力はTrueになります これを解決するために、次の手順に従います- q:=両端キュー qの最後にルートを挿入 フラグ:=False qが空でない間、実行します temp:=qの左側から削除した後の要素 tempがnullの場合、 フラグ:=True