ከቅድመ ትዕዛዝ ማቋረጫ የ ‹BST› ድህረ-ድንበር መተላለፍን ያግኙ  


የችግር ደረጃ መካከለኛ
ውስጥ በተደጋጋሚ ተጠየቀ አማዞን አራት ኪይትስ PayU
የሁለትዮሽ ፍለጋ ዛፍ የዛፍ ተሻጋሪ

የችግሩ መግለጫ  

ችግሩ “ከ Border prevers travers of BST postorder traversal from preorder traversal” የሚለው የሁለትዮሽ ፍለጋ ዛፍ ቅድመ መሻር ይሰጥዎታል ይላል። ከዚያ የተሰጠውን ግብዓት በመጠቀም የድህረ-ትዕዛዙን ተሻጋሪ ያግኙ።

ለምሳሌ  

ከቅድመ ትዕዛዝ ማቋረጫ የ ‹BST› ድህረ-ድንበር መተላለፍን ያግኙ  

preorder traversal sequence: 5 2 1 3 4 7 6 8 9
1 4 3 2 6 9 8 7 5

ቀረበ  

የተሰጠው ችግር የሁለትዮሽ ፍለጋ ዛፍ ቅድመ-ቅደም ተከተል የማቋረጥ ቅደም ተከተል እንደሰጠን ይናገራል ፡፡ አሁን እኛ እንደ ግብዓት ተመሳሳይ የቅድመ-ትዕዛዝ መሻገሪያ ያለው የዛፉን የኋላ መተላለፍ መፈለግ አለብን ፡፡ ይህንን ችግር በብቃት መፍታት ይጠበቅብናል ፡፡

የዋህነት አቀራረብ በመጀመሪያውን መጠቀም ነው የቅድሚያ ትእዛዝ መሻገር እና መገንባት BST. ከዚያ በቀላሉ በዚህ አዲስ በተሰራው ዛፍ ላይ የፖስታ ትእዛዝ ማቋረጥ ያድርጉ ፡፡ ነገር ግን ይህ አካሄድ ቦታን በተመለከተ ውጤታማ አይደለም ፡፡ ምክንያቱም የተገነባው ዛፍ እንደአናት ላይ እየሰራ ስለሆነ ፡፡

ችግሩን በብቃት ለመፍታት የግብዓት ድርድርን እናልፋለን ፡፡ የግብዓት ድርድር የእኛ ቅድመ-ትዕዛዝ መተላለፍ ነው። ስለዚህ በቅድመ-ትዕዛዙ መተላለፍ ውስጥ እናልፋለን እና የአሁኑ ንጥረ ነገር መዋሸት አለበት እንፈልጋለን ፡፡ ከመጀመሪያው አካል ስንጀምር ከዝቅተኛ ኢንቲጀር እሴት እስከ ከፍተኛ ኢንቲጀር እሴት ክልል እናዘጋጃለን ፡፡ ምክንያቱም የቅድመ-መሻገሪያው ከግራ እና ከቀኝ ንዑስ ዛፍ በፊት ሥሩ አለው ፡፡ የግራ ንዑስ ዛፍ ካለ ከዚያ ንጥረነገሮች ከዝቅተኛ የቁጥር እሴት እስከ ሥሩ አነስ ወዳለው እሴት መዋሸት እንዳለባቸው እናውቃለን። በተመሳሳይ ከትልቁ ሥር ዋጋ እስከ ከፍተኛ ኢንቲጀር እሴት ሊዋሽ ለሚገባው የቀኝ ንዑስ ዛፍ ፡፡ አሁን ያለው ንጥረ ነገር በዚህ ክልል ውስጥ የማይዋሽ ከሆነ ፡፡ ከዚያ ያኛው በሌላው ንዑስ ክፍል ውስጥ መተኛት አለበት (ያ ማለት በትክክለኛው ንዑስ ክፍል እና በተቃራኒው ከሚተኛ ይልቅ ለግራ ንዑስ ክፍል የማይተኛ ከሆነ ነው)።

ተመልከት
በሁለትዮሽ ዛፍ ውስጥ ከፍተኛውን የደረጃ ድምርን ያግኙ

ኮድ  

ከቅድመ-ትዕዛዝ መሻገሪያ የ ‹BST› ድህረ-ትዕዛዝ መተላለፍን ለማግኘት የ C ++ ኮድ

#include<bits/stdc++.h>
using namespace std;

void preToPost(int input[], int n, int mn, int mx, int& idx)
{
  // base case
  if (idx == n)
    return;
  // if current element does not belong to current subtree
  if (input[idx] < mn || input[idx] > mx) {
    return;
  }

  // store the value of root ro print after printing its subtrees
  int root = input[idx];
  idx++;

  // recursively solve for left and right subtree
  preToPost(input, n, mn, root, idx);
  preToPost(input, n, root, mx, idx);
  // print root
  cout<<root<<" ";
}

int main()
{
  int input[] = {5, 2, 1, 3, 4, 7, 6, 8, 9};
  int n = (sizeof input)/(sizeof input[0]);
  int idx = 0;
  	preToPost(input, n, INT_MIN, INT_MAX, idx);
}
1 4 3 2 6 9 8 7 5

ከቅድመ-ትዕዛዝ መሻገሪያ የ ‹BST› ድህረ-ትዕዛዝ መተላለፍን ለማግኘት የጃቫ ኮድ

import java.util.*;

class Main{
  static int idx = 0;
  static void preToPost(int input[], int n, int mn, int mx)
  {
    // base case
    if (idx == n)
      return;
    // if current element does not belong to current subtree
    if (input[idx] < mn || input[idx] > mx) {
      return;
    }

    // store the value of root ro print after printing its subtrees
    int root = input[idx];
    idx++;

    // recursively solve for left and right subtree
    preToPost(input, n, mn, root);
    preToPost(input, n, root, mx);
    // print root
    System.out.print(root+" ");
  }

  public static void main(String[] args)
  {
    int input[] = {5, 2, 1, 3, 4, 7, 6, 8, 9};
    int n = input.length;
    	preToPost(input, n, Integer.MIN_VALUE, Integer.MAX_VALUE);
  }
}
1 4 3 2 6 9 8 7 5

ውስብስብነት ትንተና  

የጊዜ ውስብስብነት

ኦ (ኤን)፣ ምክንያቱም የተሰጠውን ድርድር በሙሉ መሻገር አለብን።

የቦታ ውስብስብነት

ኦ (ኤን)፣ ለዳግም ተጋላጭ ተግባራት ጥቅም ላይ እየዋለ ባለው አጠናቃሪ ቁልል ምክንያት።

ተመልከት
በደረጃ ማዘዋወር በ Spiral ቅጽ