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

指定されたプレオーダートラバーサルからBSTを構築します-C++で2を設定します


事前注文トラバーサルが1つあるとします。このトラバーサルから。ツリーを生成する必要があるため、トラバーサルが[10、5、1、7、40、50]の場合、ツリーは-

のようになります。

指定されたプレオーダートラバーサルからBSTを構築します-C++で2を設定します

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

  • 空のスタックを作成する

  • 最初の値をルートとして作成し、スタックにプッシュします。

  • スタックが空でなく、次の値がスタックの最上位要素よりも大きい間、うんちを続けます。これを最後にポップされたノードの右の子にします。次に、新しいノードをスタックにプッシュします。

  • 次の値がtop要素よりも小さい場合は、スタックtop要素の左の子として作成します。次に、新しいノードをスタックにプッシュします。

  • すべてのプレオーダーリスト要素を確認するまで、手順2と3を繰り返します。

#include <iostream>
#include <stack>
using namespace std;
class node {
   public:
   int data;
   node *left;
   node *right;
};
node* getNode (int data) {
   node* temp = new node();
   temp->data = data;
   temp->left = temp->right = NULL;
   return temp;
}
node* constructTree ( int pre[], int size ) {
   stack<node*> stk;
   node* root = getNode( pre[0] );
   stk.push(root);
   int i;
   node* temp;
   for ( i = 1; i < size; ++i ) {
      temp = NULL;
      while ( !stk.empty() && pre[i] > stk.top()->data ) {
         temp = stk.top();
         stk.pop();
      }
      if ( temp != NULL) {
         temp->right = getNode( pre[i] );
         stk.push(temp->right);
      } else {
         node* peek_node = stk.top();
         peek_node->left = getNode( pre[i] );
         stk.push(stk.top()->left);
      }
   }
   return root;
}
void inord (node* node) {
   if (node == NULL)
      return;
   inord(node->left);
   cout << node->data << " ";
   inord(node->right);
}
int main () {
   int pre[] = {10, 5, 1, 7, 40, 50};
   int size = sizeof( pre ) / sizeof( pre[0] );
   node *root = constructTree(pre, size);
   cout << "Inorder traversal: ";
   inord(root);
}

出力

Inorder traversal: 1 5 7 10 40 50

  1. PythonのStackを使用して、指定されたポストオーダートラバーサルからBSTを構築します

    二分探索木のポストオーダートラバーサルが1つあるとします。そこから二分探索木を見つける必要があります。 したがって、入力が[6、12、10、55、45、15]の場合、出力は これを解決するには、次の手順に従います- 関数solve()を定義します。これには後注文が必要です n:=ポストオーダーのサイズ root:=postorderの最後の要素で新しいツリーノードを作成します stk:=スタック ルートをstkに挿入 i:=n-2 =0の場合、実行 x:=値postorder [i]で新しいノードを作成します stkが空ではなく

  2. Pythonでプレオーダーおよびポストオーダートラバーサルからバイナリツリーを構築する

    PreorderとPostorderの2つのトラバーサルシーケンスがあるとすると、これら2つのシーケンスからバイナリツリーを生成する必要があります。したがって、シーケンスが[1,2,4,5,3,6,7]、[4,5,2,6,7,3,1]の場合、出力はになります。 これを解決するには、次の手順に従います- ans:=値pre [0]を取得してツリーノードを作成し、スタック:=空のスタックを作成し、ansを挿入します i:=1およびj:=0 whilei<前の長さとj<後の長さ スタックの最上位値=post[j]の場合、jを1増やし、スタックからポップして、次の反復に進みます n