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

พิมพ์โหนดภายในทั้งหมดของทรีไบนารีใน C++


ในปัญหานี้ เราได้รับไบนารีทรีและเราต้องพิมพ์โหนดภายในทั้งหมดของแผนผังไบนารี

ต้นไม้ไบนารี เป็นต้นไม้ที่โหนดสามารถมีโหนดย่อยได้สูงสุด 2 โหนด โหนดหรือจุดยอดต้องไม่มีโหนด โหนดย่อยหนึ่งโหนดหรือโหนดย่อยสองโหนด

ตัวอย่าง

พิมพ์โหนดภายในทั้งหมดของทรีไบนารีใน C++

โหนดภายใน เป็นโหนดที่สามารถมีลูกได้อย่างน้อยหนึ่งโหนด เช่น โหนดที่ไม่ใช่โหนดลีฟคือโหนดภายใน

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

พิมพ์โหนดภายในทั้งหมดของทรีไบนารีใน C++

ผลผลิต − 7 4 9

เพื่อแก้ปัญหานี้ เราจะสำรวจไบนารีทรีโดยใช้การข้ามผ่าน BFS (การค้นหาแบบกว้างก่อน)

ระหว่างการเดินทาง เราจะพุชโหนดไปยังคิว เมื่อเราเปิดองค์ประกอบจากคิว เราจะพิมพ์โหนดทั้งหมดของทรีที่ไม่มีโหนดย่อย

ตัวอย่าง

ตรรกะของเราใช้งานโดยโค้ดด้านล่าง -

#include <bits/stdc++.h>
using namespace std;
struct Node {
   int data;
   Node *left, *right;
   Node(int data){
      left = right = NULL;
      this->data = data;
   }
};
void printNonLeafNodes(Node* root) {
   queue<Node*> treeNodes;
   treeNodes.push(root);
   while (!treeNodes.empty()) {
      Node* curr = treeNodes.front();
      treeNodes.pop();
      bool isInternal = 0;
      if (curr->left) {
         isInternal = 1;
         treeNodes.push(curr->left);
      }
      if (curr->right) {
         isInternal = 1;
         treeNodes.push(curr->right);
      }
      if (isInternal)
         cout<<curr->data<<"\t";
   }
}
int main() {
   Node* root = new Node(43);
   root->left = new Node(12);
   root->right = new Node(78);
   root->left->left = new Node(4);
   root->right->left = new Node(9);
   root->right->right = new Node(1);
   root->right->right->right = new Node(50);
   root->right->right->left = new Node(25);
   cout<<"All internal Nodes of the binary tree are :\n";
   printNonLeafNodes(root);
   return 0;
}

ผลลัพธ์

All internal Nodes of the binary tree are −
43 12 78 1