ในปัญหานี้ เราได้รับไบนารีทรี BT และค่าคีย์ งานของเราคือค้นหาโหนดถัดไปด้านขวาของคีย์ที่กำหนด
Binary Tree เป็นโครงสร้างข้อมูลพิเศษที่ใช้เพื่อการจัดเก็บข้อมูล
มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน
อินพุต
key = 4
ผลลัพธ์
5
คำอธิบาย
องค์ประกอบถัดจากโหนด 4 คือ 5
แนวทางการแก้ปัญหา
วิธีแก้ปัญหาอย่างง่ายคือโดยการสำรวจต้นไม้ไบนารีโดยใช้การข้ามผ่านคำสั่งระดับ และสำหรับค่าคีย์ที่กำหนด เราจะตรวจสอบว่ามีโหนดอยู่ถัดจากโหนดที่ระดับเดียวกันในการข้ามผ่านหรือไม่ ถ้าใช่ ให้คืนค่าโหนดถัดไป ไม่เช่นนั้นให้คืนค่า NULL
โปรแกรมเพื่อแสดงการทำงานของโซลูชันของเรา
ตัวอย่าง
#include <iostream> #include <queue> using namespace std; struct node { struct node *left, *right; int key; }; node* newNode(int key) { node *temp = new node; temp->key = key; temp->left = temp->right = NULL; return temp; } node* findNextRightNodeBT(node *root, int k) { if (root == NULL) return 0; queue<node *> nodeVal; queue<int> nodeLevel; int level = 0; nodeVal.push(root); nodeLevel.push(level); while (nodeVal.size()) { node *node = nodeVal.front(); level = nodeLevel.front(); nodeVal.pop(); nodeLevel.pop(); if (node->key == k) { if (nodeLevel.size() == 0 || nodeLevel.front() != level) return NULL; return nodeVal.front(); } if (node->left != NULL) { nodeVal.push(node->left); nodeLevel.push(level+1); } if (node->right != NULL) { nodeVal.push(node->right); nodeLevel.push(level+1); } } return NULL; } int main() { node *root = newNode(1); root->left = newNode(2); root->right = newNode(3); root->left->left = newNode(4); root->left->right = newNode(5); root->right->left = newNode(6); int key = 4; cout<<"The next right node of the node "<<key<<" is "; node *nextNode = findNextRightNodeBT(root, key); if(nextNode != NULL) cout<<nextNode->key; else cout<<"not available"; return 0; }
ผลลัพธ์
The next right node of the node 4 is 5