এটি কি বিএসটি প্রাক-অর্ডার ট্র্যাভারসাল?


21

পটভূমি

একটি বাইনারি ট্রি একটি মূলী গাছ যার প্রতিটি নোডের সবচেয়ে দুটি সন্তান এ আছে।

একটি লেবেলযুক্ত বাইনারি গাছ একটি বাইনারি গাছ যার প্রতিটি নোডকে ইতিবাচক পূর্ণসংখ্যার সাথে লেবেলযুক্ত হয়; তদুপরি, সমস্ত লেবেল স্বতন্ত্র

একটি বিএসটি (বাইনারি অনুসন্ধান ট্রি) একটি লেবেলযুক্ত বাইনারি গাছ যেখানে প্রতিটি নোডের লেবেল তার বাম সাবট্রির সমস্ত নোডের লেবেলের চেয়ে বড় এবং তার ডান সাবট্রির সমস্ত নোডের লেবেলের চেয়ে ছোট। উদাহরণস্বরূপ, নিম্নলিখিতটি একটি বিএসটি:

একটি বিএসটি

প্রি-অর্ডার ট্র্যাভেরসাল একটি লেবেল বাইনারি গাছের নিম্নলিখিত সিউডো-কোড দ্বারা সংজ্ঞায়িত করা হয়।

function preorder(node)
    if node is null then
        return
    else
        print(node.label)
        preorder(node.left)
        preorder(node.right)

আরও ভাল স্বজ্ঞাততা পেতে নিম্নলিখিত চিত্রটি দেখুন:

কোনও বিটির প্রি-অর্ডার ট্রভারসালাল

এই বাইনারি গাছের শিখরগুলি নিম্নলিখিত ক্রমে মুদ্রিত হয়:

F, B, A, D, C, E, G, I, H

আপনি এখানে বিএসটি সম্পর্কে আরও পড়তে পারেন এবং প্রাক-অর্ডার ট্র্যাভারসাল সম্পর্কে আরও এখানে

চ্যালেঞ্জ

পূর্ণসংখ্য এর একটি তালিকা দেওয়া আপনার কাজটি হ'ল এমন কোনও বিএসটি আছে কিনা তা নির্ধারণ করা যার প্রি-অর্ডার ট্র্যাভারসাল প্রিন্টগুলি হ'ল ।একটিএকটি

ইনপুট

  • পৃথক ধনাত্মক পূর্ণসংখ্যার খালি খালি তালিকাএকটি
  • বৈকল্পিকভাবে, দৈর্ঘ্য ।একটি

আউটপুট

  • একজন truthy মান যদি কিছু বিএসটি এর প্রি-অর্ডার ট্র্যাভেরসাল হয়।একটি
  • অন্যথায় একটি মিথ্যা মান।

বিধি

  • বৈধ জমা দেওয়ার জন্য মানক বিধি , I / O , লুফোলস প্রযোজ্য।
  • এটি , তাই সংক্ষিপ্ততম সমাধান (বাইটে) জিতেছে। যথারীতি, গোল্ফ ভাষায় হাস্যকর সংক্ষিপ্ত সমাধানগুলি আপনার পছন্দের ভাষায় দীর্ঘ উত্তর পোস্ট করা থেকে নিরুৎসাহিত করবেন না।
  • এটি কোনও নিয়ম নয়, তবে সমাধানটির পরীক্ষার জন্য একটি লিঙ্ক এবং এটি কীভাবে কাজ করে তার একটি ব্যাখ্যা অন্তর্ভুক্ত করা থাকলে আপনার উত্তরটি আরও ভালভাবে পাওয়া যাবে।

উদাহরণ

Input                   ---->   Output

[1]                     ---->   True
[1,2,3,4]               ---->   True
[5,1,4,2,3]             ---->   True
[5,4,3,2,1,6,7,8,9]     ---->   True
[4,2,1,3,6,5,7]         ---->   True
[8,3,1,6,4,7,10,14,13]  ---->   True
[2,3,1]                 ---->   False
[6,3,2,4,5,1,8,7,9]     ---->   False
[1,2,3,4,5,7,8,6]       ---->   False
[3,1,4,2]               ---->   False

উদাহরণগুলিতে দৃষ্টি আকর্ষণ করতে এই লিঙ্কটি ( কেভিন ক্রুইজসেনের সৌজন্যে ) দেখুন।



আমরা কি অনুমান করতে পারি যে সমস্ত সংখ্যার ইতিবাচক হয়?
জিবি

@ জিবি হ্যাঁ আমি এখন পোস্ট সম্পাদনা করব।
ডেল্ডাড্ডার

উত্তর:


11

জাভাস্ক্রিপ্ট (নোড.জেএস) , 49 বাইট

a=>!a.some((p,i)=>a.some((q,j)=>q>p&a[j+=j>i]<p))

এটি অনলাইন চেষ্টা করুন!

একটি0একটিএন-1একটি0আমি<<এন;একটিআমি<একটি-1একটিআমি<একটি

আরনাউল্ডকে ধন্যবাদ , 1 বাইট সংরক্ষণ করুন।


8

জেলি , 7 বাইট

ŒPŒ¿€4ḟ

এটি অনলাইন চেষ্টা করুন!

[4]অন্যথায় ট্র্যাভারসালগুলির জন্য ফিরে আসে []

মূলত TSH এর এলগরিদম ব্যবহার করে: একটি প্রি-অর্ডার ট্র্যাভেরসাল জন্য "disqualifying" শর্ত একটি হল subsequence 3 উপাদানের যে মত দেখাচ্ছে [মাঝামাঝি, হাই, কম] । (উদাহরণস্বরূপ, [20, 30, 10]))

আমরা equivalently কোন subsequences জন্য চেক কোনো সূচক আছে দৈর্ঘ্য 4 তাদের বিন্যাস তালিকায়, যা সব তালিকা মত সাজানো হয় [একটি 1 ... একটি তুলা উন্নয়ন বোর্ড] যেখানে একটি আমি সাজানো হয় এবং একটি আমি এই <b <গ <ঘ । (আমরা শেষ তিনটি উপাদানের দিকে নজর দিলে এই জাতীয় প্রতিটি তালিকাই অযোগ্য ঘোষণা করবে এবং প্রতিটি অযোগ্য তালিকা অবশ্যই এই ফর্মের)

ŒP          All subsequences.
  Œ¿€       Permutation index of each.
     4ḟ     Set difference of {4} and this list.

প্রমাণ

প্রাক-অর্ডার ট্র্যাভারসালটিতে কোনও অযোগ্য সিদ্ধান্ত নেই

বেস কেস: ট্রভারসাল (•) খালি তালিকা। ✓

আনয়ন: ট্রভারসাল (টি) হ'ল: t.root ++ traversal (t.left) ++ traversal (t.right)

যাক [একটি, B, C] একটি subsequence ইহার হও। আমরা সি <a <বি অসম্ভব দেখাব ।

  • যদি t.root = a হয় , তবে c <a <b এর জন্য c ∈ t.left এবং b ∈ t.right প্রয়োজন , সুতরাং [a, b, c] ভুল ক্রম order
  • যদি A, B, C ∈ t.left বা A, B, C ∈ t.right , আনয়ন হাইপোথিসিস ব্যবহার করুন।
  • যদি একটি ∈ t.left এবং c ∈ t.right হয় তবে সি> এ

উপ-অনুগমকে অযোগ্য ঘোষণা না করে স্বতন্ত্র পূর্ণসংখ্যার একটি তালিকা একটি বিএসটি-র প্রাক-অর্ডার ট্র্যাভারসাল

যদি তালিকাটি খালি থাকে তবে এটি তুচ্ছ বিএসটি the এর ট্র্যাভার্সাল •

তালিকা করা হয় তাহলে মাথা দ্বারা অনুসরণ লেজ :

  • যাক কম দীর্ঘতম উপসর্গ হতে লেজ কম উপাদানের মাথা , এবং দিন আরো তালিকার বাকি হও।
  • তারপর আরো [1]> মাথা , এবং সমস্ত অন্যান্য আরো [আমি] তার চেয়ে অনেক বেশী হয় মাথা খুব (অন্যথায় [মাথা, আরো [1], আরো [আমি]] একটি disqualifying subsequence হবে)।
  • পুনরাবৃত্তি: কম বেশি এবং আরও বিএসটিতে রূপান্তর করুন।
  • এখন আমাদের তালিকাটি traversal হয়

                     head
                    /    \
             BST(less)   BST(more),
    

    এবং এই গাছটি একটি বৈধ বিএসটি।


1
ভাল প্রমাণ। আসলে আমি উত্তর পোস্ট করার সময় সূত্রটি প্রমাণ করি নি। আমি কেবল অনুভব করেছি যে ইনপুট থেকে বিএসটি নির্মাণের কিছু চেষ্টা করার পরে এটি সঠিক।
tsh

5

জাভা 10, 94 বাইট

a->{var r=0>1;for(int j=a.length-1,i;j-->0;)for(i=0;i<j;)r|=a[j]>a[i]&a[j+1]<a[i++];return!r;}

@Tsh 'জাভাস্ক্রিপ্ট উত্তরের পোর্ট ।

এটি অনলাইনে চেষ্টা করুন।

ব্যাখ্যা:

a->{                      // Method with integer-array parameter and boolean return-type
  var r=0>1;              //  Result-boolean, starting at false
  for(int j=a.length-1,i;j-->0;)
                          //  Loop `j` in the range (length-1, 0]:
    for(i=0;i<j;)         //   Inner loop `i` in the range [0, j):
      r|=                 //    If any are true, change the result to true as well:
         a[j]>a[i]        //     The `j`'th item is larger than the `i`'th item
         &a[j+1]<a[i++];  //     And the `j+1`'th item is smaller than the `i`'th item
  return!r;}              //  After the nested loop, check if the boolean is still false

1
টিআইএল যে জাভা বুলিয়ানদের সাথে পুনরায় নিয়োগ দেওয়া যেতে পারে |=। আমি ধরে নিই &=কি কাজ করবে?
জে.সাল্ল

@ J.Sallé হাঁ, উভয় |=এবং &=শর্টকার্ট হিসেবে কাজ b = b | conditionএবং b = b & condition(যেখানে &এবং |শর্টকার্ট হয় &&এবং ||অবশ্যই অধিকাংশ ক্ষেত্রে)।
কেভিন ক্রুইজসেন

5

রুবি , 46 40 38 বাইট

f=->r{a,*b=r;!a||b==b&[*0..a]|b&&f[b]}

এটি অনলাইন চেষ্টা করুন!

এটি প্রথম উপাদানটিকে aপুনরুত্থিতভাবে একটি পাইভ হিসাবে গ্রহণ করে এবং বাকি অ্যারের দুটি অংশে বিভক্ত করা যায় কিনা তা যাচাই করে কাজ করে (ছেদ এবং ইউনিয়ন ব্যবহার করে: প্রথমে সমস্ত উপাদানগুলি সরান> ক, তারপরে আবার ডানদিকে যুক্ত করুন এবং কিছু আছে কিনা তা পরীক্ষা করে দেখুন) পরিবর্তন করা হয়েছে)।


3

রেটিনা 0.8.2 , 31 বাইট

\d+
$*
M`\b((1+)1+,).*\1\2\b
^0

এটি অনলাইন চেষ্টা করুন! লিঙ্কে পরীক্ষার কেস অন্তর্ভুক্ত রয়েছে। @ Tsh এর অ্যালগরিদম ব্যবহার করে। ব্যাখ্যা:

\d+
$*

অ্যানারিতে রূপান্তর করুন।

M`\b((1+)1+,).*\1\2\b

দুটি ক্রমাগত অবতরণ সংখ্যার মধ্যে থাকা সংখ্যাগুলি সন্ধান করুন।

^0

ম্যাচের সংখ্যা শূন্য কিনা তা পরীক্ষা করে দেখুন।




3

স্কালা ( 68 67 বাইট)

def%(i:Seq[Int])= !i.combinations(3).exists(c=>c(0)<c(1)&c(0)>c(2))

এটি অনলাইনে চেষ্টা করুন

@ নেলহোফের পোর্ট উত্তর

স্কালা ( 122 103 বাইট)

def f(i:Seq[Int]):Boolean=if(i.size<1)1>0 else{val(s,t)=i.tail.span(_<i(0));t.forall(_>i(0))&f(s)&f(t)}

উভয় সমাধানকেই খাটো করার পরামর্শের জন্য @ লাইকোনিকে ধন্যবাদ।

এটি অনলাইনে চেষ্টা করুন

ব্যাখ্যা:

  1. টুকরো টুকরো (স্কালার ব্যবহার করে) span ) অ্যারের মাথাটি স্লাইসিংয়ের মানদণ্ড হিসাবে ব্যবহার করে।
  2. নিশ্চিত করুন যে অ্যারের প্রথম স্লাইস মাথার চেয়ে কম এবং দ্বিতীয় স্লাইসটি মাথার চেয়ে বেশি।
  3. পুনরাবৃত্তভাবে পরীক্ষা করুন যে প্রতিটি স্লাইসটিও সন্তুষ্ট করে

1
আমার মনে হয় আপনার কোনও জায়গার দরকার নেই val (s,t), trueহতে পারে 1>0এবং s.forall(_<i(0))&এটি ইতিমধ্যে বীমাকৃত হওয়া উচিত হিসাবে আপনি ড্রপ করতে পারেন span
লাইকনি

1
আপনি ফাংশনটি কল করতে পারেন %এবং স্থানটি ড্রপ করতে পারেন :def%(i:Seq[Int])=
লাইকনি

আপনার সমাধানগুলিতে অন্য কোনওটির বিপরীতে ফাংশনটির ঘোষণা রয়েছে। খাঁটি অভিব্যক্তিগুলি বেশ ছোট। ;)
ডঃ ওয়াই উইট

আমি tsh এর উত্তরটি পোর্ট করার চেষ্টা করছিলাম, তবে এটি যথেষ্ট সংক্ষিপ্ত হয়ে উঠতে পরিচালিত হয়নি। সংস্করণ ১ l.zipWithIndex.foldLeft(1>0){case(r,v,i)=>r&l.zip(l.tail).slice(i+1,l.length).forall(x=>l(i)>x._1|l(i)<x._2)}। সংস্করণ ২ (for(i<-l.indices)yield l.zip(l.tail).slice(i+1,l.length).forall(x =>l(i)>x._1|l(i)<x._2)).forall(x=>x)। এই সংক্ষিপ্ত করতে কিভাবে কোন ধারণা?
ডঃ ওয়াই উইট

সরল ইংরেজিতে অ্যালগরিদম: প্রতিটি উপাদানের জন্য সমস্ত জোড়া উপাদানগুলির একে অপরের পাশে যাওয়ার সাথে একটি পরীক্ষা করা হয়।
ড। ওয়াই উইট

2

05 এ বি 1 ই , 15 10 বাইট

ŒεD{3.IÊ}P

@ লিনের জেলি উত্তরটির পোর্ট । -মিজানাকে
ধন্যবাদ 5-বাইটস ।

এটি অনলাইনে চেষ্টা করুন বা সমস্ত পরীক্ষার কেস যাচাই করুন

ব্যাখ্যা: "

Œ             # Take all sublists of the (implicit) input-list
              #  i.e. [2,3,1] → [[2],[2,3],[2,3,1],[3],[3,1],[1]]
              #  i.e. [1,2,3,4]
              #   → [[1],[1,2],[1,2,3],[1,2,3,4],[2],[2,3],[2,3,4],[3],[3,4],[4]]
 ε      }     # Map each to:
  D           #  Duplicate the current sublist on the stack
   {          #  Sort the copy
              #   i.e. [2,3,1] → [1,2,3]
              #   i.e. [2,3,4] → [2,3,4]
    3.I       #  Get the 4th (3rd 0-indexed) permutation of this list
              #   i.e. [1,2,3] → [2,3,1]
              #   i.e. [2,3,4] → [3,4,2]
       Ê      #  Check that the lists are NOT equal
              #   i.e. [2,3,1] and [2,3,1] → 0 (falsey)
              #   i.e. [2,3,4] and [3,4,2] → 1 (truthy)
         P    # Check whether all are truthy (and output implicitly)
              #  i.e. [1,1,0,1,1,1] → 0 (falsey)
              #  i.e. [1,1,1,1,1,1,1,1,1,1] → 1 (truthy)

1
কীভাবে ŒεD{3.IÊ}P?
এমিগানা

1
@ এমিগনা হ্যাঁ, এটি আসলে অনেক সহজ ...>।> ধন্যবাদ! :) (এবং একটি সুন্দর উইকএন্ডে থাকুন))
কেভিন ক্রুইজসেন

2

হাস্কেল , 41 বাইট

f(h:t)=t==[]||all(>h)(snd$span(<h)t)&&f t

এটি অনলাইন চেষ্টা করুন!

ব্যবহার লিন পর্যবেক্ষণ এটা সেখানে কোন subsequence যে চেক করতে যথেষ্ট যে mid..high..low । এর অর্থ হ'ল প্রতিটি উপাদানগুলির জন্য h, পরবর্তী এলিমেন্টগুলির তালিকার tপরে আসে উপাদানগুলির একটি ব্লক এবং <hতারপরে উপাদানগুলির একটি ব্লক >h(উভয় ব্লক খালি থাকতে পারে)। তাই, কোড চেক আমরা উপাদানের উপসর্গ ড্রপ পর যে <hমধ্যে t, অবশিষ্ট উপাদানের সব >h। প্রতিটি প্রাথমিক উপাদানগুলির জন্য এটি পুনরুক্ত করা হয়h দৈর্ঘ্য 1 না হওয়া পর্যন্ত হয়।

একটি সম্ভাব্য সরলীকরণ হ'ল এটি সাবপেটেরনগুলি মাঝখানে..উত্তর, সর্বনিম্ন যেখানে শেষ দুটি পরপর রয়েছে তা পরীক্ষা করা যথেষ্ট । দুর্ভাগ্যক্রমে, হাস্কেলের কাছে শেষ দুটি উপাদানটি বের করার কোনও সংক্ষিপ্ত পথ নেই, যেমন একটি প্যাটার্ন ম্যাচ দিয়ে সামনে থেকে করা যায় a:b:c। আমি একটি সংক্ষিপ্ত সমাধান খুঁজে পেয়েছি যা মাঝারি, উচ্চ..চেনা জন্য পরীক্ষা করে তবে এটি ইনপুটগুলি পছন্দ করতে ব্যর্থ হয়[3,1,4,2]

লাইকোনি থেকে ফরম্যাটেড পরীক্ষার মামলা নেওয়া ।


1

জাপট , 14 বাইট

d@sY ð_§XÃxÈ-Y

জাপট ইন্টারপ্রেটার

আউটপুট falseবিএসটি জন্য,true কোনও বিএসটি-র জন্য নয়।

ব্যাখ্যা:

d@                Run on each item X, return true if any aren't 0: 
  sY                  Ignore the numbers before this index
     ð_§XÃ            Get the indexes of numbers less than or equal to X
                          If it is a BST, this list will be e.g. [0,1,2...]
            -Y        Subtract the position within the index list from each index
                          eg. [0,1,2] -> [0,0,0] , [0,1,4] -> [0,0,2]
          xÈ          Sum the resulting array

1

scala

সমস্ত পন্থা tsh দ্বারা প্রদর্শিত নিয়মের বাস্তবায়ন।

109

l.zipWithIndex.foldLeft(1>0){case(r,(v,i))=>r&l.zip(l.tail).slice(i+1,l.size).forall(x=>l(i)>x._1|l(i)<x._2)}

101

(for(i<-l.indices)yield l.zip(l.tail).slice(i+1,l.size).forall(x =>l(i)>x._1|l(i)<x._2)).forall(x=>x)

98

l.indices.foldLeft(1>0)((r,i)=>r&(l.zip(l.tail).slice(i+1,l.size).forall(x=>l(i)>x._1|l(i)<x._2)))

78

(for(i<-l.indices;j<-i+1 to l.size-2)yield l(i)>l(j)|l(i)<l(j+1)).forall(x=>x)

এটি অবশ্যই কোনও ক্রিয়াকলাপ হতে হবে এবং কেবল একটি অভিব্যক্তি নয় তবে প্রতিটি লাইনটি (17 বাইট) দিয়ে শুরু করতে হবে

def%(l:Seq[Int])=

0

ওরাকল এসকিউএল, 177 বাইট

with r(i,v)as(select rownum,value(t)from table(a)t)
select nvl(min(case when r.v<p.l and r.v>p.v then 0end),1)from r,(select i,lag(v)over(order by i)l,v from r)p where r.i+1<p.i

যেহেতু ওরাকল এসকিউএলে কোনও বুলিয়ান প্রকার নেই, তাই কোয়েরিটি 1 বা 0 প্রদান করে।

ওরাকল এসকিউএল 12 সি, 210 বাইট

with function f(n ku$_objnumset,i int)return int as begin return n(i);end;
select min(case when f(c,1)>f(c,2)or f(c,1)<f(c,3)then 1else 0end)from(select value(t)c from table(powermultiset_by_cardinality(a,3))t)

পিএল / এসকিউএল - যেমন একটি (i) এর মতো এসকিউএল তে অ্যারের অ্যাক্সেস উপাদানটি সম্ভব নয় - সুতরাং এই উদ্দেশ্যে ফাংশনটি fঘোষণা করা হয়েছিল with clause। না হলে সমাধানটি আরও খাটো হত।

অন্যান্য সীমাবদ্ধতা

  • 3 টি উপাদানের চেয়ে কম অ্যারেগুলির জন্য একটি ব্যতিক্রম ছুঁড়েছে (1 ফিরে আসার পরিবর্তে)
  • এমন একটি অনুমান আছে যে ডকুমেন্টেশনে এটি স্পষ্টভাবে বর্ণিত না হলেও পাওয়ারমলটিসেট_বাই_কার্ডিনালিটি অর্ডার সংরক্ষণ করে

বর্গ তালিকা

SQL> set heading off
SQL> with r(i,v)as(select rownum,value(t)from table(ku$_objnumset(6,3,2,4,5,1,8,7,9))t)
  2  select nvl(min(case when r.v<p.l and r.v>p.v then 0end),1)from r,
  3  (select i,lag(v)over(order by i)l,v from r)p where r.i+1<p.i
  4  /

                                            0

SQL> with function f(n ku$_objnumset,i int)return int as begin return n(i);end;
  2  select min(case when f(c,1)>f(c,2)or f(c,1)<f(c,3)then 1else 0end)
  3  from(select value(t)c from table(powermultiset_by_cardinality(ku$_objnumset(6,3,2,4,5,1,8,7,9),3))t)
  4  /

                                                     0

SQL> with r(i,v)as(select rownum,value(t)from table(ku$_objnumset(8,3,1,6,4,7,10,14,13))t)
  2  select nvl(min(case when r.v<p.l and r.v>p.v then 0end),1)from r,
  3  (select i,lag(v)over(order by i)l,v from r)p where r.i+1<p.i
  4  /

                                            1

SQL> with function f(n ku$_objnumset,i int)return int as begin return n(i);end;
  2  select min(case when f(c,1)>f(c,2)or f(c,1)<f(c,3)then 1else 0end)
  3  from(select value(t)c from table(powermultiset_by_cardinality(ku$_objnumset(8,3,1,6,4,7,10,14,13),3))t)
  4  /

                                                     1

অনলাইন যাচাইকরণ apex.oracle.com

হালনাগাদ

ওরাকল এসকিউএল, 155 বাইট

with r(i,v)as(select rownum,value(t)from table(a)t)select nvl(min(case when a.v<b.v and a.v>c.v then 0end),1)r from r a,r b,r c where a.i<b.i and b.i+1=c.i

0

সি, 823 বাইট (হোয়াইটস্পেসের অক্ষর গণনা করা নয়); 923 বাইট (হোয়াইটস্পেস সহ)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct tree
{struct tree * left;struct tree * right;int val;}tree;static int * test_p = 0;
void insert_root(tree ** root, int in)
{if (*root == NULL){*root = (tree *)calloc(1,sizeof(tree));(*root)->val = in;return;}else if (in < (*root)->val){insert_root(&((*root)->left),in);}else{insert_root(&((*root)->right),in);}}
void preorder(tree * root)
{if ( root == 0x0 ) { return; }*test_p++ = root->val;preorder(root->left);preorder(root->right);}
int main(int argc, char ** argv)
{int test_list[argc-1];memset(test_list,0,argc*sizeof(int));test_p = test_list;tree * root = (tree *)calloc(1,sizeof(tree));root->val = strtol(argv[1],0x0,10);int i = 1;while ( argv[++i] != 0x0 ){insert_root(&root,strtol(argv[i],0x0,10));}preorder(root);test_p = test_list;i = 1;while ( ( i < argc ) ){if ( *test_p != strtol(argv[i],0x0,10) ){return 0;}test_p++;i++;}return 1;}

প্রোগ্রামটির পঠনযোগ্য সংস্করণটি নীচে রয়েছে:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct tree
{
    struct tree * left;

    struct tree * right;

    int val;

} tree;


static int * test_p = 0;

void insert_root(tree ** root, int in)
{
  if (*root == NULL)
  {
    *root = (tree *)calloc(1,sizeof(tree));

    (*root)->val = in;

    return;
  }

  else if (in < (*root)->val)
  {
    insert_root(&((*root)->left),in);
  }

  else
  {
    insert_root(&((*root)->right),in);
  }
}

void preorder(tree * root)
{
    if ( root == 0x0 ) {  return; }

        *test_p++ = root->val;

        preorder(root->left);

        preorder(root->right);

}

int main(int argc, char ** argv)
{
    int test_list[argc-1];

    memset(test_list,0,argc*sizeof(int));

    test_p = test_list;

    tree * root = (tree *)calloc(1,sizeof(tree));

    root->val = strtol(argv[1],0x0,10);

    int i = 1;

    while ( argv[++i] != 0x0 )
    {
        insert_root(&root,strtol(argv[i],0x0,10));
    }

    preorder(root);

    test_p = test_list;

    i = 1;

    while ( ( i < argc ) )
    {
        if ( *test_p != strtol(argv[i],0x0,10) )
        {
            return 0;
        }

        test_p++;

        i++;
    }

    return 1;   
}

এই প্রোগ্রামের প্রধান পদ্ধতিটি এমন সংখ্যার তালিকাটি পড়ে যা (বৈধ পূর্ববর্তী অর্ডার ট্র্যাভারসাল) বলে allegedly

Insert_root নামক ফাংশনটি একটি বাইনারি অনুসন্ধান বৃক্ষে পূর্ণসংখ্যার সন্নিবেশ করায় যেখানে আগের নোডগুলিতে কম মান থাকে এবং পরবর্তী নোডগুলিতে বৃহত্তর অন্তর্গত মান থাকে।

ফাংশন প্রিআর্ডার (মূল) গাছটিকে একটি প্রিআর্ডার ট্রভারসাল এ ট্র্যাভার করে এবং একই সাথে প্রতিটি পূর্ণসংখ্যার সাথে সংশ্লেষ করে অ্যালগোরিদমটি int অ্যারে টেস্ট_লিস্টে আসে

একটি চূড়ান্ত সময় লুপ পরীক্ষার তাহলে int- এ মূল্যবোধের প্রতি stdin তালিকায় এবং যারা test_list প্রতিটি সূচিতে সমতুল্য। তাহলে সেখান থেকে একটি তালিকা উপাদান stdin যে নিজ নিজ সূচিতে test_list সংশ্লিষ্ট উপাদান মেলে ব্যর্থ হয়, প্রধান ফাংশন আয় 0. অন্য মেন মেথড আয় 1

কী ফিরে এসেছে তা নির্ধারণ করতে, বাশ টার্মিনালে প্রতিধ্বনি $ স্থিতি টাইপ করুন । BASH হয় 1 বা একটি 0 মুদ্রণ করবে।


2
আপনার স্কোর এক গণনা সাদা।
গম উইজার্ড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.