特定の二分木が完全な二分木であるかどうかをチェックするC++プログラム
二分木が与えられた場合、タスクはそれが完全な二分木であるかどうかを確認することです。すべてのノードに0個または2個の子がある場合、バイナリツリーは完全なバイナリツリーであると言われます。
例
入力-1
出力:
1
説明: リーフノードを除くすべてのノードには2つの子があるため、完全な二分木です。
入力-2:
出力:
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になります。
-
Pythonで二分木がBSTであるかどうかをチェックするプログラム
二分木があるとしましょう。二分探索木かどうかを確認する必要があります。私たちが知っているように、BSTには次のプロパティがあります- 左側のサブツリーのすべてのノードが現在のノード値よりも小さい 右側のサブツリーのすべてのノードが現在のノード値よりも大きい これらのプロパティは、すべてのノードに対して再帰的に保持されます したがって、入力が次のような場合 その場合、出力はTrueになります これを解決するには、次の手順に従います- x:=ツリー要素の順序どおりの走査シーケンスのリスト xがソートされている場合、 trueを返す falseを返す 理解を深めるために
-
Pythonで二分木が完成しているかどうかをチェックするプログラム
二分木があるとしましょう。これが完全な二分木であるかどうかを確認する必要があります。完全な二分木でわかっているように、レベルはノードで埋められますが、最後のレベルのノードと最後のレベルのすべてのノードが可能な限り左にある可能性があります。 したがって、入力が次のような場合 その場合、出力はTrueになります これを解決するために、次の手順に従います- q:=両端キュー qの最後にルートを挿入 フラグ:=False qが空でない間、実行します temp:=qの左側から削除した後の要素 tempがnullの場合、 フラグ:=True