C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++のBSTのInorderSuccessor


二分探索木とその中にノードがあるとすると、BSTでそのノードの順序どおりの後続を検索する必要があります。ノードpの後継は、p.valより大きい最小のキーを持つノードであることがわかっています。

したがって、入力がroot =[2,1,3]、p =1、

のような場合

C++のBSTのInorderSuccessor

その場合、出力は2になります

これを解決するには、次の手順に従います-

  • 再帰的メソッドをinorderSuccessor()で定義します。これにより、ルートとp

    が取得されます。
  • ルートがnullの場合、-

    • nullを返す

  • ルートのval<=pのvalの場合、-

    • inorderSuccessor(ルートの権利、p)を返す

  • それ以外の場合

    • オプション:=inorderSuccessor(ルートの左側、p)

    • return(オプションがゼロの場合はルート、それ以外の場合はオプション)

理解を深めるために、次の実装を見てみましょう-

#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

  1. C++のBSTの2つのノード間の最大要素

    問題の説明 N個の要素の配列と、指定された配列に属する2つの整数A、Bが与えられます。 arr[0]からarr[n-1]に要素を挿入して、二分探索木を作成します。タスクは、AからBへのパスで最大の要素を見つけることです。 例 配列が{24、23、15、36、19、41、25、35}の場合、次のようにBSTを形成できます- A=19およびB=41とすると、これら2つのノード間の最大要素は41です。 アルゴリズム ノードAおよびBの最も低い共通祖先(LCA)を見つけます。 LCAとAの間の最大ノードを見つけます。これをmax1と呼びましょう LCAとBの間の最大ノードを見つけます。こ

  2. C++のBSTからの床と天井

    ここでは、BSTから床と天井の値を見つける方法を説明します。たとえば、空きノードがBSTに配置されているメモリ管理システムを作成する場合です。入力リクエストに最適なものを見つけます。キー値よりも大きい最小のデータでツリーを下に移動するとします。3つのケースが考えられます。 ルートが鍵です。その場合、ルート値は上限値です ルートデータ<キーの場合、上限値は左側のサブツリーにないため、右側のサブツリーに進み、問題のあるドメインを減らします キーの場合、上限値は右側のサブツリーにある可能性があり、左側のサブツリーにキーよりも大きいデータを持つノードが見つかる可能性があります。そのような要素が存在し