C++で特定の二分木を剪定するプログラム
すべてのノードの値が0または1のいずれかであるバイナリツリーがあるとします。1を含まないすべてのサブツリーが削除された同じツリーを見つける必要があります。したがって、ツリーが次のような場合-
これを解決するには、次の手順に従います-
-
再帰メソッドsolve()を定義します。これにより、ノードが取得されます。メソッドは次のようになります-
-
ノードがnullの場合、nullを返します
-
ノードの左側:=solve(ノードの左側)
-
ノードの権利:=solve(ノードの権利)
-
ノードの左側がnullで、ノードの右側もnullで、ノード値が0の場合、nullを返します
-
リターンノード
理解を深めるために、次の実装を見てみましょう-
例
#include <bits/stdc++.h>
using namespace std;
class TreeNode{
public:
int val;
TreeNode *left, *right;
TreeNode(int data){
val = data;
left = NULL;
right = NULL;
}
};
void inorder(TreeNode *root){
if(root){
inorder(root->left);
cout << root->val << ", ";
inorder(root->right);
}
}
class Solution {
public:
TreeNode* pruneTree(TreeNode* node) {
if(!node)return NULL;
node->left = pruneTree(node->left);
node->right = pruneTree(node->right);
if(!node->left && !node->right && !node->val){
return NULL;
}
return node;
}
};
main(){
TreeNode *root = new TreeNode(1);
root->left = new TreeNode(1);
root->right = new TreeNode(0);
root->left->left = new TreeNode(1);
root->left->right = new TreeNode(1);
root->right->left = new TreeNode(0);
root->right->right = new TreeNode(1);
root->left->left->left = new TreeNode(0);
Solution ob;
inorder(ob.pruneTree(root));
} 入力
TreeNode *root = new TreeNode(1); root−>left = new TreeNode(1); root−>right = new TreeNode(0); root−>left−>left = new TreeNode(1); root−>left−>right = new TreeNode(1); root−>right−>left = new TreeNode(0); root−>right−>right = new TreeNode(1); root−>left−>left−>left = new TreeNode(0);
出力
1, 1, 1, 1, 0, 1,
-
C++での二分木の剪定
バイナリツリーのヘッドノードルートがあり、さらにすべてのノードの値が0または1であるとします。1を含まないすべてのサブツリーが削除された同じツリーを見つける必要があります。したがって、ツリーが次のような場合- これを解決するには、次の手順に従います- 再帰メソッドsolve()を定義します。これにより、ノードが取得されます。メソッドは次のようになります- ノードがnullの場合、nullを返します ノードの左側:=solve(ノードの左側) ノードの権利:=solve(ノードの権利) ノードの左側がnullで、ノードの右側もnullで、ノード値が0の
-
特定のバイナリツリーがC++のSumTreeであるかどうかを確認します
ここでは、二分木が和木であるかどうかを確認する方法を説明します。ここで問題となるのは、合計ツリーとは何かです。合計ツリーは、ノードがその子の合計値を保持する二分木です。ツリーのルートには、その下にあるすべての要素の合計が含まれます。これは合計ツリーの例です- これを確認するために、簡単なトリックに従います。合計値がルートと同じである場合は、左右のサブツリー要素の合計を見つけます。これが合計ツリーです。これは再帰的なアプローチの1つになります。 例 #include <bits/stdc++.h> using namespace std; class node {