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

โปรแกรมค้นหา Inorder Successor ของแผนผังการค้นหาไบนารีใน C++


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

ดังนั้นหากอินพุตเป็นแบบ

โปรแกรมค้นหา Inorder Successor ของแผนผังการค้นหาไบนารีใน C++

และ p =1 ผลลัพธ์จะเป็น 2

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • กำหนดวิธีการเรียกซ้ำ inorderSuccessor() ซึ่งจะทำการรูทและ p
  • ถ้ารูทเป็นโมฆะ ดังนั้น:
    • คืนค่า null
  • ถ้า val ของ root <=val ของ p แล้ว:
    • ส่งคืน inorderSuccessor(ทางขวาของ root , p)
  • มิฉะนั้น
    • option :=inorderSuccessor(left of root , p)
    • ผลตอบแทน (หากตัวเลือกเป็นศูนย์ ให้ทำการรูท มิฉะนั้น ตัวเลือก)

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

ตัวอย่าง

#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;
}

อินพุต

TreeNode *root = new TreeNode(2);
root->left = new TreeNode(1);
root->right = new TreeNode(3);
1

ผลลัพธ์

2