Computer >> Máy Tính >  >> Lập trình >> C ++

Chương trình in các nút giữa hai số cấp nhất định của cây nhị phân bằng C ++

Trong hướng dẫn này, chúng ta sẽ thảo luận về một chương trình in các nút giữa hai số cấp nhất định của cây nhị phân.

Trong phần này, chúng ta sẽ có mức thấp và mức cao cho một cây nhị phân cụ thể và chúng ta phải in tất cả các phần tử giữa các mức đã cho.

Để giải quyết vấn đề này, chúng ta có thể sử dụng truyền tải cấp độ dựa trên hàng đợi. Trong khi di chuyển qua đường ngang nhỏ hơn, chúng ta có thể có một nút đánh dấu ở cuối mỗi cấp. Sau đó, chúng ta có thể đi đến từng cấp và in các nút của nó nếu nút đánh dấu tồn tại giữa các cấp đã cho.

Ví dụ

#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;
}

Đầu ra

Elements between the given levels are :
8 22
4 12