ในปัญหานี้ เราได้รับแผนผังการค้นหาแบบไบนารี และเราต้องพิมพ์โหนดทั้งหมดที่มีค่าคี่
แผนผังการค้นหาแบบไบนารี เป็นต้นไม้ชนิดพิเศษที่มีคุณสมบัติดังต่อไปนี้ −
-
ทรีย่อยด้านซ้ายมีค่าน้อยกว่าโหนดรูทเสมอ
-
ทรีย่อยที่ถูกต้องมีค่ามากกว่าโหนดรูทเสมอ
-
ทั้งแผนผังย่อยด้านซ้ายและขวาควรเป็นไปตามคุณสมบัติทั้งสองข้างต้นด้วย
มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน −
ผลผลิต − 1 3 9
ในการแก้ปัญหานี้ วิธีง่ายๆ คือการสำรวจต้นไม้ ในการข้ามผ่าน เราจะตรวจสอบค่าของแต่ละโหนดของต้นไม้ หากโหนดเป็นเลขคี่ ให้พิมพ์ไปที่โหนดถัดไปของทรี
ความซับซ้อนของโปรแกรมจะขึ้นอยู่กับจำนวนโหนด ความซับซ้อนของเวลา:O(n)
ตัวอย่าง
โปรแกรมด้านล่างแสดงการใช้งานโซลูชันของเรา -
#include <bits/stdc++.h> 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 printOddNodes(Node* root){ if (root != NULL) { printOddNodes(root->left); if (root->key % 2 != 0) cout<<root->key<<"\t"; printOddNodes(root->right); } } int main(){ Node* root = NULL; root = insertNode(root, 6); root = insertNode(root, 3); root = insertNode(root, 1); root = insertNode(root, 4); root = insertNode(root, 9); root = insertNode(root, 8); root = insertNode(root, 10); cout<<"Nodes with odd values are :\n"; printOddNodes(root); return 0; }
ผลลัพธ์
โหนดที่มีค่าคี่คือ -
1 3 9