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

C++를 사용하여 이진 트리의 주어진 두 레벨 번호 사이의 노드를 인쇄하는 프로그램

<시간/>

이 튜토리얼에서는 이진 트리의 주어진 두 레벨 번호 사이의 노드를 인쇄하는 프로그램에 대해 논의할 것입니다.

여기에서 특정 이진 트리에 대해 낮은 수준과 높은 수준이 제공되며 주어진 수준 사이의 모든 요소를 ​​인쇄해야 합니다.

이를 해결하기 위해 대기열 기반 수준 순회를 사용할 수 있습니다. 중위 순회를 통해 이동하는 동안 각 수준의 끝에 표시 노드를 가질 수 있습니다. 그런 다음 지정된 수준 사이에 표시 노드가 있는 경우 각 수준으로 이동하여 해당 노드를 인쇄할 수 있습니다.

예시

#include <iostream>
#include <queue>
using namespace std;
struct Node{
   int data;
   struct Node* left, *right;
};
//to print the nodes between the levels
void print_nodes(Node* root, int low, int high){
   queue <Node *> Q;
   //creating the marking node
   Node *marker = new Node;
   int level = 1;
   Q.push(root);
   Q.push(marker);
   while (Q.empty() == false){
      Node *n = Q.front();
      Q.pop();
      //checking for the end of level
      if (n == marker){
      cout << endl;
      level++;
      if (Q.empty() == true || level > high)
      break;
      Q.push(marker);
      continue;
   }
   if (level >= low)
      cout << n->data << " ";
      if (n->left != NULL) Q.push(n->left);
      if (n->right != NULL) Q.push(n->right);
   }
}
Node* create_node(int data){
   Node* temp = new Node;
   temp->data = data;
   temp->left = temp->right = NULL;
   return (temp);
}
int main(){
   struct Node *root= create_node(20);
   root->left= create_node(8);
   root->right= create_node(22);
   root->left->left= create_node(4);
   root->left->right= create_node(12);
   root->left->right->left= create_node(10);
   root->left->right->right= create_node(14);
   cout << "Elements between the given levels are :";
   print_nodes(root, 2, 3);
   return 0;
}

출력

Elements between the given levels are :
8 22
4 12