สมมติว่าเรามีแผนผังการค้นหาแบบไบนารีและมีโหนดอยู่ในนั้น เราต้องค้นหาตัวตายตัวแทนตามลำดับของโหนดนั้นใน BST ดังที่เราทราบแล้วว่าตัวต่อจากโหนด p คือโหนดที่มีคีย์ที่เล็กที่สุดที่มากกว่า p.val
ดังนั้น หากอินพุตเป็นเหมือน root =[2,1,3], p =1,
แล้วผลลัพธ์จะเป็น 2
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
กำหนดวิธีการเรียกซ้ำ inorderSuccessor() ซึ่งจะทำการรูทและ p
-
ถ้ารูทเป็นโมฆะ −
-
คืนค่า null
-
-
ถ้า val ของ root <=val ของ p แล้ว −
-
ส่งคืน inorderSuccessor(ทางขวาของ root , p)
-
-
มิฉะนั้น
-
ตัวเลือก :=inorderSuccessor(ซ้ายของรูท , p)
-
return (หากตัวเลือกเป็นศูนย์ ให้ทำการรูท มิฉะนั้น option)
-
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
#include <bits/stdc++.h> using namespace std; class TreeNode{ public: int val; TreeNode *left, *right; TreeNode(int data){ val = data; left = NULL; right = NULL; } }; class Solution { public: TreeNode* inorderSuccessor(TreeNode* root, TreeNode* p) { if(!root) return NULL; if(root->val <= p->val){ return inorderSuccessor(root->right, p); } else{ TreeNode* option = inorderSuccessor(root->left, p); return !option ? root : option; } } }; main(){ TreeNode *root = new TreeNode(2); root->left = new TreeNode(1); root->right = new TreeNode(3); TreeNode *p = root->left; Solution ob; cout << (ob.inorderSuccessor(root, p))->val; }
อินพุต
{2,1,3},1
ผลลัพธ์
2