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

โปรแกรมพิมพ์ root to leaf path ที่สั้นที่สุดใน Binary Tree โดยใช้ C++


ในบทช่วยสอนนี้ เราจะพูดถึงโปรแกรมเพื่อพิมพ์เส้นทางรากที่สั้นที่สุดไปยังเส้นทางใบแรกในต้นไม้ไบนารี

ในสิ่งนี้ เราจะได้รับไบนารีทรีที่มีค่าต่างกัน และเราต้องหาเส้นทางที่สั้นที่สุดจากโหนดรูทไปยังโหนดลีฟในทรีไบนารีที่กำหนด

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

ตัวอย่าง

#include <bits/stdc++.h>
using namespace std;
struct Node{
   struct Node* left;
   struct Node* right;
   int data;
};
struct Node* create_node(int data){
   struct Node* temp = new Node;
   temp->data = data;
   temp->left = NULL;
   temp->right = NULL;
   return temp;
}
void print_spath(int Data, unordered_map<int, int> parent){
   if (parent[Data] == Data)
      return;
   print_spath(parent[Data], parent);
   cout << parent[Data] << " ";
}
void leftmost_path(struct Node* root){
   queue<struct Node*> q;
   q.push(root);
   int LeafData = -1;
   struct Node* temp = NULL;
   unordered_map<int, int> parent;
   parent[root->data] = root->data;
   while (!q.empty()){
      temp = q.front();
      q.pop();
      if (!temp->left && !temp->right){
         LeafData = temp->data;
      break;
      }
      else{
         if (temp->left){
            q.push(temp->left);
            parent[temp->left->data] = temp->data;
         }
         if (temp->right) {
            q.push(temp->right);
            parent[temp->right->data] = temp->data;
         }
      }
   }
   print_spath(LeafData, parent);
   cout << LeafData << " ";
}
int main(){
   struct Node* root = create_node(21);
   root->left = create_node(24);
   root->right = create_node(35);
   root->left->left = create_node(44);
   root->right->left = create_node(53);
   root->right->right = create_node(71);
   root->left->left->left = create_node(110);
   root->left->left->right = create_node(91);
   root->right->right->left = create_node(85);
   leftmost_path(root);
   return 0;
}

ผลลัพธ์

21 35 53