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

指定されたバイナリツリーを、C++で論理ANDプロパティを保持するツリーに変換します


このチュートリアルでは、特定のバイナリツリーを論理ANDプロパティを保持するツリーに変換するプログラムについて説明します。

このために、バイナリツリーが提供されます。私たちのタスクは、それを論理ANDプロパティを保持するツリーに変換することです。これは、ノードがその子ノードのAND演算の値を持っていることを意味します。すべてのノードの値は0または1のいずれかであることに注意してください。

#include<bits/stdc++.h>
using namespace std;
//node structure of binary tree
struct Node{
   int data;
   struct Node* left;
   struct Node* right;
};
//creation of a new node
struct Node* newNode(int key){
   struct Node* node = new Node;
   node->data= key;
   node->left = node->right = NULL;
   return node;
}
//converting the tree with nodes following
//logical AND operation
void transform_tree(Node *root){
   if (root == NULL)
      return;
   //moving to first left node
   transform_tree(root->left);
   //moving to first right node
   transform_tree(root->right);
   if (root->left != NULL && root->right != NULL)
      root->data = (root->left->data) &
   (root->right->data);
}
//printing the inorder traversal
void print_tree(Node* root){
   if (root == NULL)
      return;
   print_tree(root->left);
   printf("%d ", root->data);
   print_tree(root->right);
}
int main(){
   Node *root=newNode(0);
   root->left=newNode(1);
   root->right=newNode(0);
   root->left->left=newNode(0);
   root->left->right=newNode(1);
   root->right->left=newNode(1);
   root->right->right=newNode(1);
   printf("Before conversion :\n");
   print_tree(root);
   transform_tree(root);
   printf("\nAfter conversion :\n");
   print_tree(root);
   return 0;
}

出力

Before conversion :
0 1 1 0 1 0 1
After conversion :
0 0 1 0 1 1 1

  1. C++のバイナリツリーでノードの後続を事前注文する

    この問題では、二分木とノード値が与えられます。私たちのタスクは、ノードのプレオーダーサクセサを印刷することです。 二分木 は、各ルートノードが最大2つの子ノードを持つことができる特殊なタイプのツリーです。 プレオーダートラバーサル ツリーのノードをトラバースする方法です。ここでは、最初にルートノードをトラバースし、次に左の子、次に右の子をトラバースします。 後続ノードの事前注文 ノードのプレオーダートラバーサルでノードの隣に来るノードです。 問題を理解するために例を見てみましょう Input: 9 Output 0 Explanation: the preorder traver

  2. C++のバイナリツリーでルートから特定のノードまでの距離を検索します

    ノードが少ない二分木があると考えてください。ルートと別のノードuの間の距離を見つける必要があります。ツリーが次のようになっているとします。 これで、(root、6)=2の間の距離、パスの長さは2、(root、8)=3の間の距離などになります。 この問題を解決するために、再帰的アプローチを使用して、左右のサブツリーでノードを検索し、各レベルの長さも更新します。 例 #include<iostream> using namespace std; class Node {    public:       int data; &