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

ค้นหามิเรอร์ของโหนดที่กำหนดในต้นไม้ไบนารีใน C ++


ในปัญหานี้ เราได้รับไบนารีทรี งานของเราคือค้นหามิเรอร์ของโหนดที่กำหนดในทรีไบนารี เราจะได้รับโหนด และค้นหาภาพสะท้อนของโหนดนั้นในทรีย่อยตรงข้าม

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

อินพุต

ค้นหามิเรอร์ของโหนดที่กำหนดในต้นไม้ไบนารีใน C ++

ผลลัพธ์

mirror of B is E.

แนวทางการแก้ปัญหา

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

โปรแกรมเพื่อแสดงการทำงานของโซลูชันของเรา

ตัวอย่าง

#include <bits/stdc++.h>
using namespace std;
struct Node {
   int key;
   struct Node* left, *right;
};
struct Node* newNode(int key){
   struct Node* n = (struct Node*) malloc(sizeof(struct Node*));
   if (n != NULL){
      n->key = key;
      n->left = NULL;
      n->right = NULL;
      return n;
   }
   else{
      cout << "Memory allocation failed!"
      << endl;
      exit(1);
   }
}
int mirrorNodeRecur(int node, struct Node* left, struct Node* right){
   if (left == NULL || right == NULL)
      return 0;
   if (left->key == node)
      return right->key;
   if (right->key == node)
      return left->key;
      int mirrorNode = mirrorNodeRecur(node, left->left, right->right);
   if (mirrorNode)
      return mirrorNode;
   mirrorNodeRecur(node, left->right, right->left);
}
int findMirrorNodeBT(struct Node* root, int node) {
   if (root == NULL)
      return 0;
   if (root->key == node)
      return node;
   return mirrorNodeRecur(node, root->left, root->right);
}
int main() {
   struct Node* root = newNode(1);
   root-> left = newNode(2);
   root->left->left = newNode(3);
   root->left->left->left = newNode(4);
   root->left->left->right = newNode(5);
   root->right = newNode(6);
   root->right->left = newNode(7);
   root->right->right = newNode(8);
   int node = root->left->key;
   int mirrorNode = findMirrorNodeBT(root, node);
   cout<<"The node is root->left, value : "<<node<<endl;
   if (mirrorNode)
      cout<<"The Mirror of Node "<<node<<" in the binary tree is
      Node "<<mirrorNode;
   else
      cout<<"The Mirror of Node "<<node<<" in the binary tree is
   not present!";
   node = root->left->left->right->key;
   mirrorNode = findMirrorNodeBT(root, node);
   cout<<"\n\nThe node is root->left->left->right, value :
   "<<node<<endl;
   if (mirrorNode)
      cout<<"The Mirror of Node "<<node<<" in the binary tree is
   Node "<<mirrorNode;
   else
      cout<<"The Mirror of Node "<<node<<" in the binary tree is
   not present!";
}

ผลลัพธ์

The node is root->left, value : 2
The Mirror of Node 2 in the binary tree is Node 6

The node is root->left->left->right, value : 5
The Mirror of Node 5 in the binary tree is not present!