Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

Inorder Successor ใน BST ใน C ++


สมมติว่าเรามีแผนผังการค้นหาแบบไบนารีและมีโหนดอยู่ในนั้น เราต้องค้นหาตัวตายตัวแทนตามลำดับของโหนดนั้นใน BST ดังที่เราทราบแล้วว่าตัวต่อจากโหนด p คือโหนดที่มีคีย์ที่เล็กที่สุดที่มากกว่า p.val

ดังนั้น หากอินพุตเป็นเหมือน root =[2,1,3], p =1,

Inorder Successor ใน BST ใน C ++

แล้วผลลัพธ์จะเป็น 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