สมมติว่าเรามี binary search tree และค่า K เป็น input เราต้องหา K-th smallest element ใน tree
ดังนั้น ถ้า input เป็นแบบ

k = 3 แล้ว output จะเป็น 15
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ −
กำหนดฟังก์ชัน find_kth_smallest() ซึ่งจะรับ root, count, k
ถ้า root เป็น NULL แล้ว −
คืนค่า NULL
left = find_kth_smallest(left of root, count, k)
ถ้า left ไม่ใช่ NULL แล้ว −
คืนค่า left
(เพิ่ม count ขึ้น 1)
ถ้า count เท่ากับ k แล้ว −
คืนค่า root
คืนค่า find_kth_smallest(right of root, count, k)
จาก main method ให้ทำดังนี้ −
count := 0
res = find_kth_smallest(root, count, k)
ถ้า res เป็น NULL แล้ว −
แสดง not found
มิฉะนั้น
แสดงค่า val ของ res
ตัวอย่าง (C++)
ลองดูการนำไปใช้ต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น −
#include <iostream> using namespace std; struct TreeNode { int val; TreeNode *left, *right; TreeNode(int x) { val = x; left = right = NULL; } }; TreeNode* find_kth_smallest(TreeNode* root, int &count, int k) { if (root == NULL) return NULL; TreeNode* left = find_kth_smallest(root->left, count, k); if (left != NULL) return left; count++; if (count == k) return root; return find_kth_smallest(root->right, count, k); } void kth_smallest(TreeNode* root, int k) { int count = 0; TreeNode* res = find_kth_smallest(root, count, k); if (res == NULL) cout << "Not found"; else cout << res->val; } int main() { TreeNode* root = new TreeNode(25); root->left = new TreeNode(13); root->right = new TreeNode(27); root->left->left = new TreeNode(9); root->left->right = new TreeNode(17); root->left->right->left = new TreeNode(15); root->left->right->right = new TreeNode(19); int k = 3; kth_smallest(root, k); }อินพุต
TreeNode* root = new TreeNode(25); root->left = new TreeNode(13); root->right = new TreeNode(27); root->left->left = new TreeNode(9); root->left->right = new TreeNode(17); root- >left->right->left = new TreeNode(15); root->left->right->right = new TreeNode(19); k = 3
เอาต์พุต
15