นี่คือการสำรวจเส้นทางการสั่งซื้อล่วงหน้าของ BST หรือไม่


21

พื้นหลัง

ต้นไม้ไบนารีเป็นต้นไม้ที่มีรากทุกโหนดมีที่มากที่สุดเด็กสองคน

ต้นไม้ไบนารีที่มีข้อความเป็นต้นไม้ไบนารีที่มีทุกโหนดมีป้ายที่มีจำนวนเต็มบวก; ยิ่งไปกว่านั้นป้ายชื่อทั้งหมดจะแตกต่างกัน

BST (ต้นไม้ค้นหาแบบทวิภาค) เป็นต้นไม้ไบนารีที่มีข้อความที่ป้ายชื่อของแต่ละโหนดมากกว่าฉลากของโหนดทั้งหมดในทรีย่อยซ้ายของตนและมีขนาดเล็กกว่าป้ายทุกโหนดในทรีย่อยด้านขวา ตัวอย่างเช่นต่อไปนี้คือ BST:

A BST

การสำรวจเส้นทางล่วงหน้าของต้นไม้ไบนารีที่ติดป้ายกำกับนั้นถูกกำหนดโดยรหัสหลอกต่อไปนี้

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

ดูภาพต่อไปนี้เพื่อรับสัญชาติญาณที่ดีขึ้น:

การสำรวจเส้นทางล่วงหน้าของ BT

จุดยอดของต้นไม้ไบนารีนี้จะถูกพิมพ์ตามลำดับต่อไปนี้:

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

คุณสามารถอ่านเพิ่มเติมเกี่ยวกับ BSTs ที่นี่และอื่น ๆ เกี่ยวกับการสำรวจเส้นทางการสั่งซื้อล่วงหน้าที่นี่

ท้าทาย

ได้รับรายชื่อของจำนวนเต็มงานของคุณคือการตรวจสอบว่ามีการ BST ที่มีการสั่งซื้อล่วงหน้า traversal พิมพ์ว่าaa

อินพุต

  • ไม่ว่างเปล่ารายการของที่แตกต่างกันจำนวนเต็มบวกa
  • เลือกความยาวของa

เอาท์พุต

  • truthyค่าถ้าเป็นสำรวจเส้นทางการสั่งซื้อล่วงหน้าของ BST บางa
  • falseyคุ้มค่าเป็นอย่างอื่น

กฎระเบียบ

  • กฎระเบียบมาตรฐานสำหรับการส่งที่ถูกต้อง , 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

ลองดูลิงค์นี้ (ความอนุเคราะห์จากKevin Cruijssen ) เพื่อดูตัวอย่าง



เราขอสมมติว่าจำนวนเต็มทั้งหมดเป็นค่าบวกได้หรือไม่
GB

@GB ใช่ ฉันจะแก้ไขโพสต์ทันที
Delfad0r

คำตอบ:


11

JavaScript (Node.js) , 49 ไบต์

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

ลองออนไลน์!

การใช้ความจริงที่ว่าอาร์เรย์0 . . n - 1 , เป็นสำรวจเส้นทางการสั่งซื้อล่วงหน้าของ BST บาง IFF 0 ฉัน< J < n ; a i < a j - 1a0...an-1a0ผม<J<n;aผม<aJ-1aผม<aJถือ

ขอบคุณArnauldบันทึก 1 ไบต์


8

เยลลี่ขนาด 7 ไบต์

ŒPŒ¿€4ḟ

ลองออนไลน์!

ผลตอบแทน[4]สำหรับ traversals []มิฉะนั้น

เป็นหลักใช้อัลกอริทึมของ TSH: ความ "สิทธ์" เงื่อนไขในการสำรวจเส้นทางการสั่งซื้อล่วงหน้าเป็นsubsequence 3 องค์ประกอบที่มีลักษณะเช่น[กลางสูงต่ำ] (ตัวอย่างเช่น [20, 30, 10])

เราเท่ากันตรวจสอบ subsequences ใด ๆ ของใด ๆความยาวที่มีดัชนี4ในรายการการเปลี่ยนแปลงของพวกเขาซึ่งจะแสดงรายการทั้งหมดเรียงเช่น[เป็น1ที่ ... k CDB]ที่ฉันเรียงลำดับและฉัน <b <ค <d (แต่ละรายการดังกล่าวจะถูกตัดสิทธิ์หากเราดูที่องค์ประกอบสามรายการสุดท้ายและรายการที่ถูกตัดสิทธิ์แต่ละรายการมีความชัดเจนในแบบฟอร์มนี้)

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

พิสูจน์

การสำรวจเส้นทางการสั่งซื้อล่วงหน้าไม่มีการตัดสิทธิ์การเล่น

กรณีฐาน: การสำรวจเส้นทาง (•)เป็นรายการที่ว่างเปล่า ✓

การเหนี่ยวนำ: การแวะผ่าน (t)คือ: t.root ++สำรวจเส้นทาง (t.left) ++ สำรวจเส้นทาง (t.right)

ปล่อย[a, b, c]เป็นส่วนหนึ่งของสิ่งนี้ เราจะแสดงc <a <bเป็นไปไม่ได้

  • หากt.root = aดังนั้นc <a <bต้องใช้c ∈ t.leftและb ∈ t.rightดังนั้น[a, b, c]เป็นคำสั่งที่ไม่ถูกต้อง
  • ถ้าa, b, c ∈ t.leftหรือa, b, c ∈ t.rightให้ใช้สมมติฐานการเหนี่ยวนำ
  • หาก∈ t.leftและค∈ t.rightแล้วค> a

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

หากรายการว่างเปล่ามันเป็นเส้นทางผ่านของ BST •เล็กน้อย

หากรายการเป็นหัวตามด้วยหาง :

  • ปล่อย น้อยเป็นคำนำหน้ายาวที่สุดของหางขององค์ประกอบน้อยกว่าหัวและให้มากขึ้นจะเป็นส่วนที่เหลือของรายการ
  • แล้วก็ มากขึ้น [1]> หัวและอื่น ๆมากขึ้น [ผม]มากกว่าหัวเกินไป (มิฉะนั้น[หัวมากขึ้น [1], อื่น ๆ [ผม]]จะเป็น subsequence เกณฑ์)
  • recurse: เปิดน้อยและอื่น ๆ อีกมากมายเป็น BST
  • ตอนนี้รายการของเราคือการผ่าน

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

    และต้นไม้นี้เป็น BST ที่ถูกต้อง


1
หลักฐานดี จริงๆแล้วฉันไม่ได้พิสูจน์สูตรเมื่อโพสต์คำตอบ ฉันแค่รู้สึกว่ามันถูกต้องหลังจากพยายามสร้าง BST จากอินพุต
tsh

5

Java 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 'คำตอบ JavaScript

ลองออนไลน์

คำอธิบาย:

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
TIL ว่า booleans Java |=สามารถมีพระราชเสาวนีย์กับ ฉันคิดว่า&=จะได้ผล
J. Sallé

@ J.Salléใช่ทั้งคู่|=และ&=ทำงานเป็นทางลัดสำหรับb = b | conditionและb = b & condition(โดยที่&และและ|เป็นทางลัดสำหรับ&&และ||ในกรณีส่วนใหญ่แน่นอน)
Kevin Cruijssen

5

Ruby , 46 40 38 ไบต์

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

ลองออนไลน์!

วิธีนี้ใช้งานได้โดยการเรียกองค์ประกอบแรกaเป็น pivot ซ้ำและตรวจสอบว่าส่วนที่เหลือของอาร์เรย์สามารถแยกออกเป็นสองส่วนได้หรือไม่ (โดยใช้จุดตัดและสหภาพ: ก่อนอื่นให้ลบองค์ประกอบทั้งหมด> 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))

ลองออนไลน์

คำตอบของพอร์ตของ @ nwellnhofคำตอบ

สกาลา ( 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)}

ขอบคุณ @Laikoni สำหรับคำแนะนำในการทำให้ทั้งสองวิธีสั้นลง

ลองออนไลน์

คำอธิบาย:

  1. ชิ้น (ใช้ของสกาล่า span ) อาร์เรย์โดยใช้หัวของอาร์เรย์เป็นเกณฑ์การแบ่ง
  2. ยืนยันว่าชิ้นแรกของอาร์เรย์นั้นน้อยกว่าหัวและชิ้นที่สองนั้นใหญ่กว่าหัว
  3. ตรวจสอบซ้ำว่าแต่ละชิ้นยังตอบสนอง (2)

1
ฉันคิดว่าคุณไม่จำเป็นต้องมีพื้นที่ในval (s,t), trueสามารถ1>0และคุณสามารถวางเช่นนี้แล้วควรได้รับการประกันโดยs.forall(_<i(0))& span
Laikoni

1
คุณสามารถเรียกใช้ฟังก์ชัน%และปล่อยพื้นที่:def%(i:Seq[Int])=
Laikoni

โซลูชันของคุณมีการประกาศฟังก์ชันที่ไม่เหมือนใคร การแสดงออกที่บริสุทธิ์นั้นค่อนข้างสั้น ;)
ดร. วายวิทย์

ฉันพยายามหาคำตอบของพอร์ต tsh แต่ไม่สามารถจัดการให้สั้นพอ เวอร์ชั่น 1 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 ความคิดใดจะทำให้สิ่งเหล่านี้สั้นลงได้อย่างไร
ดร. วายวิทย์

อัลกอริทึมในภาษาอังกฤษธรรมดา: สำหรับแต่ละองค์ประกอบจะตรวจสอบกับคู่ขององค์ประกอบทั้งหมดที่อยู่ติดกัน
ดร. วายวิทย์

2

05AB1E , 15 10 ไบต์

ŒεD{3.IÊ}P

ท่าเรือ@Lynn 's คำตอบวุ้น
-5 ไบต์ขอบคุณที่@Emigna

ลองมันออนไลน์หรือตรวจสอบกรณีทดสอบทั้งหมด

คำอธิบาย: "

Œ             # 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ล่ะ
Emigna

1
@Emigna ใช่นั่นจะง่ายกว่านี้แน่ ๆ ... >.> ขอบคุณ! :) (และมีวันหยุดสุดสัปดาห์ที่ดี)
Kevin Cruijssen

2

Haskell , 41 ไบต์

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

ลองออนไลน์!

ใช้การสังเกตของลินน์ว่าพอเพียงเพื่อตรวจสอบว่าไม่มีการเรียงลำดับของกลางกลาง ..สูง..ต่ำ ซึ่งหมายความว่าสำหรับแต่ละองค์ประกอบhรายการขององค์ประกอบtที่ตามมาคือบล็อกขององค์ประกอบ<hตามด้วยบล็อกขององค์ประกอบ>h(บล็อกทั้งสองอาจว่างเปล่า) ดังนั้นรหัสจะตรวจสอบว่าหลังจากที่เราวางคำนำหน้าขององค์ประกอบ<hในองค์ประกอบtที่เหลืออยู่ทั้งหมด>hองค์ประกอบที่เหลือที่มีอยู่ทั้งหมดการเรียกซ้ำจะตรวจสอบสิ่งนี้สำหรับองค์ประกอบเริ่มต้นแต่ละรายการhรายการจนกว่ารายการจะมีความยาว 1

ความเรียบง่ายที่อาจเกิดขึ้นคือพอเพียงที่จะตรวจสอบรูปแบบย่อยกลาง .. สูงต่ำเมื่อสองคนสุดท้ายติดต่อกัน แต่น่าเสียดายที่ Haskell a:b:cไม่ได้มีวิธีที่สั้นที่จะดึงสององค์ประกอบที่ผ่านมาในขณะที่สามารถทำได้จากด้านหน้าด้วยการจับคู่รูปแบบ ฉันพบโซลูชันที่สั้นกว่าที่ตรวจสอบค่ากลางสูง .. ต่ำแต่ไม่สามารถปฏิเสธอินพุตเช่น[3,1,4,2]แต่นี้ล้มเหลวที่จะปฏิเสธปัจจัยการผลิตเช่น

รูปแบบกรณีทดสอบที่นำมาจาก LaikoniLaikoni


1

Japt , 14 ไบต์

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

ล่าม Japt

เอาท์พุท falseสำหรับ BSTtrueไม่มี BST

คำอธิบาย:

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

สกาล่า

วิธีการทั้งหมดเป็นการใช้งานของกฎที่แสดงโดย 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

Oracle SQL, 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

เนื่องจากไม่มีประเภทบูลีนใน Oracle SQL เคียวรีจึงส่งกลับ 1 หรือ 0

Oracle SQL 12c, 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)

มันเป็นไปไม่ได้ที่จะเข้าถึงองค์ประกอบของอาเรย์ใน SQL แบบเดียวกับใน PL / SQL - คือ (i) ดังนั้นฟังก์ชั่นจึงfถูกประกาศในwith clauseจุดประสงค์นั้น มิฉะนั้นทางออกจะสั้นลงมาก

ข้อ จำกัด อื่น ๆ

  • โยนข้อยกเว้นสำหรับอาร์เรย์ที่สั้นกว่า 3 องค์ประกอบ (แทนที่จะส่งคืน 1)
  • มีการสันนิษฐานว่า powermultiset_by_cardinality รักษาลำดับแม้ว่าจะไม่ได้ระบุไว้อย่างชัดเจนในเอกสาร

รายชื่อsqlplus

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

ปรับปรุง

Oracle SQL, 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

C, 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;   
}

วิธีการหลักในโปรแกรมนี้อ่านรายการหมายเลขที่ (ถูกกล่าวหา) เส้นทางการสั่งซื้อล่วงหน้าที่ถูกกฎหมาย

ฟังก์ชัน insert_root ที่เรียกว่าแทรกจำนวนเต็มลงในแผนผังการค้นหาแบบไบนารีที่โหนดก่อนหน้านี้มีค่าน้อยกว่าและโหนดถัดไปมีค่า int ที่ใหญ่กว่า

preorder ฟังก์ชั่น (root) ลัดเลาะต้นไม้ในการสำรวจเส้นทางการสั่งซื้อล่วงหน้าและพร้อมเชื่อมแต่ละจำนวนเต็มอัลกอริทึมมาเจอกับ int อาร์เรย์test_list

Final ในขณะที่ลูปทดสอบว่าแต่ละค่า int ในรายการstdinและที่อยู่ในtest_listเทียบเท่าที่แต่ละดัชนี หากมีองค์ประกอบรายการจากstdinที่ล้มเหลวในการจับคู่องค์ประกอบที่สอดคล้องกันใน test_list ที่ดัชนีตามลำดับฟังก์ชั่นหลักส่งกลับ 0อื่น ๆ วิธีการหลักส่งกลับ 11

เมื่อต้องการกำหนดสิ่งที่ส่งกลับหลักพิมพ์สถานะ echo $ลงในเทอร์มินัล bash BASH อาจจะพิมพ์ 1 หรือ 0


2
คะแนนของคุณคือหนึ่งในพื้นที่ว่างนับ
ข้าวสาลีตัวช่วยสร้าง
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.