ในปัญหานี้ เราจะได้รับแผนผังการค้นหาแบบไบนารี งานของเราคือพิมพ์โหนดที่มีค่าทั้งหมดของแผนผังการค้นหาแบบไบนารี
แผนผังการค้นหาแบบไบนารี เป็นไบนารีทรีที่เป็นไปตามเงื่อนไขต่อไปนี้ -
-
โครงสร้างย่อยด้านซ้ายจะมีโหนดที่มีค่าน้อยกว่าโหนดหลักเสมอ
-
ถูกต้อง แผนผังย่อยจะมีโหนดที่มีค่ามากกว่าโหนดหลักเสมอ
-
โหนดทั้งหมดต้องปฏิบัติตามกฎ 2 ข้อข้างต้น
ตัวอย่างการค้นหาแบบไบนารี -
มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน −
ผลผลิต − 2 4 6 8
เพื่อแก้ปัญหานี้ เราจะต้องสำรวจโหนดทั้งหมดของแผนผังการค้นหาแบบไบนารี และตรวจสอบค่าของโหนดปัจจุบัน ถ้าเป็นเช่นนั้นให้พิมพ์โหนดไม่เช่นนั้นก็ปล่อยไว้
ตัวอย่าง
รหัสด้านล่างจะแสดงการทำงานของตรรกะของเรา -
#include <iostream> using namespace std; struct Node { int key; struct Node *left, *right; }; Node* newNode(int item){ Node* temp = new Node; temp->key = item; temp->left = temp->right = NULL; return temp; } Node* insertNode(Node* node, int key){ if (node == NULL) return newNode(key); if (key < node->key) node->left = insertNode(node->left, key); else node->right = insertNode(node->right, key); return node; } void printEvenNode(Node* root){ if (root != NULL) { printEvenNode(root->left); if (root->key % 2 == 0) cout<<root->key<<"\t"; printEvenNode(root->right); } } int main(){ Node* root = NULL; root = insertNode(root, 54); root = insertNode(root, 43); root = insertNode(root, 12); root = insertNode(root, 30); root = insertNode(root, 89); root = insertNode(root, 67); root = insertNode(root, 80); cout<<"All even nodes of the tree are :\n"; printEvenNode(root); return 0; }
ผลลัพธ์
ทุกโหนดของต้นไม้คือ −
12 30 54 80