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

โปรแกรมดำเนินการตามระดับของไบนารีทรีใน C++


สมมติว่าเรามีต้นไม้ไบนารี เราต้องสำรวจต้นไม้นี้โดยใช้รูปแบบการข้ามผ่านลำดับระดับ ดังนั้นถ้าต้นไม้เป็นเหมือน

โปรแกรมดำเนินการตามระดับของไบนารีทรีใน C++

ลำดับการข้ามผ่านจะเป็นดังนี้:[1,2,3,5,4]

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • กำหนดคิวคิวเพื่อจัดเก็บโหนด

  • แทรกรูทลงใน que

  • ในขณะที่ que ไม่ว่างเปล่าให้ทำ

    • item :=ไอเทมอยู่หน้าคิว

    • พิมพ์มูลค่าของสินค้า

    • หากรายการที่เหลือไม่เป็นค่าว่าง ให้แทรกรายการทางซ้ายลงใน que

    • หากด้านขวาของรายการไม่เป็นค่าว่าง ให้แทรกด้านขวาของรายการลงใน que

    • ลบองค์ประกอบด้านหน้าออกจาก que

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

ตัวอย่าง

#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<int> v){
   cout << "[";
   for(int i = 0; i<v.size(); i++){
      cout << v[i] << ", ";
   }
   cout << "]"<<endl;
}
class TreeNode{
   public:
      int val;
      TreeNode *left, *right;
      TreeNode(int data){
         val = data;
         left = right = NULL;
      }
};
class Solution {
   public:
   vector<int> solve(TreeNode* root) {
      if(!root)
         return {};
      vector <int> ret;
      queue <TreeNode*> q;
      q.push(root);
      while(!q.empty()){
         TreeNode* node = q.front();
         q.pop();
         ret.push_back(node->val);
         if(node->left){
            q.push(node->left);
         }
         if(node->right){
            q.push(node->right);
         }
      }
      return ret;
   }
};
main(){
   TreeNode *root = new TreeNode(1);
   root->left = new TreeNode(2);
   root->right = new TreeNode(3);
   root->left->right = new TreeNode(5);
   root->right->right = new TreeNode(4);
   Solution ob;
   print_vector(ob.solve(root));
}

อินพุต

TreeNode *root = new TreeNode(1);
root->left = new TreeNode(2);
root->right = new TreeNode(3);
root->left->right = new TreeNode(5);
root->right->right = new TreeNode(4);

ผลลัพธ์

[1, 2, 3, 5, 4, ]