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

พิมพ์ลูกพี่ลูกน้องของโหนดที่กำหนดใน Binary Treein C++


ต้นไม้ไบนารี เป็นต้นไม้พิเศษที่ทุกโหนดมีโหนดย่อยสูงสุดสองโหนด ดังนั้น ทุกโหนดจึงเป็นโหนดปลายสุดหรือมีโหนดย่อยหนึ่งหรือสองโหนด

ตัวอย่าง

พิมพ์ลูกพี่ลูกน้องของโหนดที่กำหนดใน Binary Treein C++

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

มาดูตัวอย่างกัน

พิมพ์ลูกพี่ลูกน้องของโหนดที่กำหนดใน Binary Treein C++

สำหรับไบนารีทรีด้านบน โหนดลูกพี่ลูกน้องคือ 5

เพื่อให้แนวคิดชัดเจนยิ่งขึ้น เรามาอธิบายโหนดลูกพี่ลูกน้องกัน ในไบนารีทรี กล่าวกันว่าโหนดสองโหนดเป็นโหนดลูกพี่ลูกน้อง หากโหนดทั้งสองอยู่ที่ระดับ (ความลึก) เดียวกันในไบนารีทรี แต่ไม่มีโหนดหลักเดียวกัน

มาสร้างวิธีแก้ปัญหานี้กัน

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

ตัวอย่าง

ตอนนี้ มาสร้างโปรแกรมตามตรรกะนี้กัน -

#include <bits/stdc++.h>
using namespace std;
struct Node{
   int data;
   Node *left, *right;
};
Node *newNode(int item){
   Node *temp = new Node;
   temp->data = item;
   temp->left = temp->right = NULL;
   return temp;
}
int levelOfNode(Node *root, Node *node, int level){
   if (root == NULL)
      return 0;
   if (root == node)
      return level;
   int downlevel = levelOfNode(root->left,
   node, level + 1);
   if (downlevel != 0)
      return downlevel;
   return levelOfNode(root->right, node, level + 1);
}
void printCousin(Node* root, Node *node, int level){
   if (root == NULL || level < 2)
      return;
   if (level == 2){
      if (root->left == node || root->right == node)
         return;
      if (root->left)
         cout << root->left->data << " ";
      if (root->right)
         cout << root->right->data;
   }
   else if (level > 2){
      printCousin(root->left, node, level - 1);
      printCousin(root->right, node, level - 1);
   }
}
void cousinNode(Node *root, Node *node){
   int level = levelOfNode(root, node, 1);
   printCousin(root, node, level);
}
int main(){
   Node *root = newNode(11);
   root->left = newNode(15);
   root->right = newNode(4);
   root->left->left = newNode(3);
   root->left->right = newNode(7);
   root->left->right->right = newNode(9);
   root->right->left = newNode(17);
   root->right->right = newNode(8);
   root->right->left->right = newNode(5);
   cout<<”The cousin nodes are : \t”
   cousinNode(root, root->right->right);
   return 0;
}

ผลลัพธ์

The cousin nodes are : 3 7