Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 주어진 값 x와 합이 같은 이진 트리의 카운트 쌍

<시간/>

정수 값과 변수 x가 주어지고 작업은 이진 트리를 구성하고 주어진 값 x와 동일한 합계를 갖는 쌍을 찾는 것입니다.

예를 들어

입력

int x =5, 값을 입력한 후 생성될 트리는 다음과 같습니다. -

C++에서 주어진 값 x와 합이 같은 이진 트리의 카운트 쌍

출력

Count of pairs in a binary tree whose sum is equal to a given value x are: 2

설명

we are given with an array of integer values that is used to form a binary
tree and we will check whether there is a pair present in a binary tree whose sum
equals to the given value x which is 5. So, the pairs formed are (2, 3) and (1, 4).

입력

int x =8, 값을 입력한 후 생성될 트리는 다음과 같습니다. -

C++에서 주어진 값 x와 합이 같은 이진 트리의 카운트 쌍

출력

Count of pairs in a binary tree whose sum is equal to a given value x are: 3

설명

we are given with an array of integer values that is used to form a binary
tree and we will check whether there is a pair present in a binary tree whose sum
equals to the given value x which is 8. So, the pairs formed are (2, 6), (4, 4) and (5, 3).

아래 프로그램에서 사용된 접근 방식은 다음과 같습니다. -

  • 데이터 부분과 왼쪽 및 오른쪽 하위 트리를 가리키는 왼쪽 및 오른쪽 포인터를 포함하는 노드의 구조를 만듭니다.

  • 정수 값을 입력하고 이를 이용하여 좌, 우 포인터를 통해 노드에 데이터를 입력하여 바이너리 트리를 생성합니다.

  • x의 합계 값을 갖는 쌍을 계산하는 데 사용할 x 값을 입력합니다.

  • 쌍의 합이 x인지 여부를 확인하는 부울 함수를 만듭니다.

  • 함수 내에서 루트가 NULL인지 확인한 다음 False를 반환합니다.

  • root가 ptr과 같지 않고 root의 데이터 + ptr의 데이터가 x와 같은지 확인하고 True를 반환합니다.

  • 루트, ptr 및 값 x의 왼쪽 포인터와 x, ptr 및 x의 오른쪽 포인터를 전달하여 검사 함수를 재귀적으로 호출합니다. 이제 조건이 true를 반환하는지 확인한 다음 true를 반환합니다.

  • 그렇지 않으면 false를 반환합니다.

  • 합계가 x인 쌍의 개수를 계산하는 total_pairs 함수를 만듭니다.

  • 함수 내에서 ptr이 NULL인지 확인한 다음 0을 반환합니다.

  • root, ptr 및 x를 인수로 전달하여 함수 검사를 호출합니다. 함수가 true를 반환하면 총 쌍의 값을 1씩 증가시킵니다.

  • 루트, ptr의 왼쪽 포인터, x 및 total을 전달하여 함수 total_pairs를 재귀적으로 호출하고 루트, ptr, x 및 total의 오른쪽 포인터도 전달합니다.

  • 변수 total에 저장된 정수 값으로 결과를 출력합니다.

예시

#include <bits/stdc++.h>
using namespace std;
struct tree_node {
   int data;
   tree_node *left, *right;
};
tree_node* create_node(int data){
   tree_node* newNode = (tree_node*)malloc(sizeof(tree_node));
   newNode−>data = data;
   newNode−>left = newNode−>right = NULL;
}
bool check(tree_node* root, tree_node* ptr, int x){
   if(root==NULL){
      return false;
   }
   if (root != ptr && ((root−>data + ptr−>data) == x)){
      return true;
   }
   if (check(root−>left, ptr, x) || check(root−>right, ptr, x)){
      return true;
   }
   return false;
}
void total_pairs(tree_node* root, tree_node* ptr, int x, int& total){
   if(ptr == NULL){
      return;
   }
   if(check(root, ptr, x) == true){
      total++;
   }
   total_pairs(root, ptr−>left, x, total);
   total_pairs(root, ptr−>right, x, total);
}
int main(){
   int x = 5;
   int total = 0;
   tree_node* root = create_node(5);
   root−>left = create_node(2);
   root−>right = create_node(3);
   root−>left−>left = create_node(1);
   root−>left−>right = create_node(4);
   root−>right−>left = create_node(6);
   total_pairs(root, root, x, total);
   total = total / 2;
   cout<<"Count of pairs in a binary tree whose sum is equal to a given value x are: "<< total;
   return 0;
}

출력

위의 코드를 실행하면 다음 출력이 생성됩니다 -

Count of pairs in a binary tree whose sum is equal to a given value x are: 2