Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

พิมพ์โหนดทั้งหมดระหว่างสองระดับที่กำหนดใน Binary Tree ใน C++


ในปัญหานี้ เราได้รับไบนารีทรีและสองระดับในทรี (บนและล่าง) และเราต้องพิมพ์โหนดทั้งหมดระหว่างระดับบนและระดับล่างของทรี

ต้นไม้ไบนารี เป็นต้นไม้พิเศษที่แต่ละโหนดมีโหนดสูงสุดสองโหนด (หนึ่ง/สอง/ไม่มี)

มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน −

พิมพ์โหนดทั้งหมดระหว่างสองระดับที่กำหนดใน Binary Tree ใน C++

บน − 1

ต่ำกว่า − 3

ผลผลิต

6
3 9
7 4 8 10

เพื่อแก้ปัญหานี้ เราต้องพิมพ์โหนดของต้นไม้ที่ระดับที่กำหนด เราจะเรียกฟังก์ชันแบบเรียกซ้ำโดยใช้การวนซ้ำจาก upper ถึง ล่าง ระดับในต้นไม้

อัลกอริทึมนี้เรียบง่ายแต่ซับซ้อนกว่าคำสั่ง n 2 .

วิธีแก้ปัญหาที่มีประสิทธิภาพมากขึ้นคือการข้ามผ่านคำสั่งและการใช้คิว และพิมพ์โหนดภายในระดับบนและล่างที่กำหนด

โปรแกรมที่จะใช้โซลูชันของเรา -

ตัวอย่าง

#include <iostream>
#include <queue>
using namespace std;
struct Node{
   int key;
   struct Node* left, *right;
};
void printNodesAtLevel(Node* root, int low, int high){
   queue <Node *> Q;
   Node *marker = new Node;
   int level = 1;
   Q.push(root);
   Q.push(marker);
   while (Q.empty() == false){
      Node *n = Q.front();
      Q.pop();
      if (n == marker){
         cout << endl;
         level++;
         if (Q.empty() == true || level > high) break;
         Q.push(marker);
         continue;
      }
      if (level >= low)
         cout<<n->key<<" ";
      if (n->left != NULL) Q.push(n->left);
      if (n->right != NULL) Q.push(n->right);
   }
}
Node* insertNode(int key){
   Node* temp = new Node;
   temp->key = key;
   temp->left = temp->right = NULL;
   return (temp);
}
int main() {
   struct Node *root = insertNode(6);
   root->left = insertNode(3);
   root->right = insertNode(9);
   root->left->left = insertNode(7);
   root->left->right = insertNode(4);
   root->left->right->left = insertNode(8);
   root->left->right->right = insertNode(10);
   root->left->right->right->left = insertNode(5);
   root->left->right->right->right = insertNode(1);
   root->left->right->left->left = insertNode(14);
   root->left->right->left->right = insertNode(26);
   int upper = 3;
   int lower = 1;
   cout << "Level wise Nodes between level "<<lower<<" and "<<upper<<" are \n";
   printNodesAtLevel(root, lower, upper);
   return 0;
}

ผลลัพธ์

Level wise Nodes between level 1 and 3 are
6
3 9
7 4