অর্ডার থেকে প্রি অর্ডার + পোস্ট-অর্ডার


11

কার্য

একটি সম্পূর্ণ বাইনারি গাছের প্রাক-অর্ডার এবং পোস্ট-অর্ডার ট্র্যাভারসালগুলি দেওয়া, এটির ক্রমটি ট্রেনসালটিকে ফিরে আসুন।

ট্র্যাভারসালগুলিকে দুটি তালিকা হিসাবে উপস্থাপন করা হবে, উভয়ই এন স্বতন্ত্র ধনাত্মক পূর্ণসংখ্যার সমন্বয় করবে, প্রতিটি স্বতন্ত্রভাবে একটি নোড সনাক্ত করবে। আপনার প্রোগ্রামটি এই তালিকাগুলি নিতে পারে এবং কোনও যুক্তিসঙ্গত I / O ফর্ম্যাট ব্যবহার করে ফলাফলের ক্রম ট্র্যাভারসাল আউটপুট দেয়।

আপনি ইনপুটটি বৈধ বলে ধরে নিতে পারেন (তা হল তালিকাগুলি আসলে কিছু গাছের traversals উপস্থাপন করে)।

এটি , তাই বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়ী।

সংজ্ঞা

একটি পূর্ণ বাইনারি ট্রি হ'ল নোডের সীমাবদ্ধ কাঠামো , এখানে অনন্য ইতিবাচক পূর্ণসংখ্যার দ্বারা উপস্থাপিত হয়।

একটি পূর্ণ বাইনারি গাছ হয় একটি পাতা যা একটি নোড সমন্বিত :

                                      1

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

                                      1
                                    /   \
                                  …       …

এখানে একটি পূর্ণ বাইনারি গাছের একটি সম্পূর্ণ উদাহরণ:

                                        6
                                      /   \
                                    3       4
                                   / \     / \
                                  1   8   5   7
                                     / \
                                    2   9

প্রি-অর্ডার ট্র্যাভেরসাল একটি পূর্ণ বাইনারি গাছের যাও recursively অনুসরণ হিসাবে সংজ্ঞায়িত করা হয়:

  • নোড এন সহ একটি পাতার প্রাক-অর্ডার ট্রভারসালাল তালিকা [ এন ]।
  • নোড এন এবং সাব-ট্রি (এল, আর) সমন্বিত একটি শাখার প্রাক-অর্ডার ট্র্যাভার্সাল হ'ল তালিকা [ এন ] +  প্রিআর্ডার ( এল ) +  প্রির্ডার ( আর ), যেখানে + তালিকা তালিকার অপারেটর।

উপরের গাছটির জন্য, এটি [,, ৩, ১, ৮, ২, ৯, ৪, ৫,]]


পোস্ট-অর্ডার ট্র্যাভেরসাল একটি পূর্ণ বাইনারি গাছের যাও recursively অনুসরণ হিসাবে সংজ্ঞায়িত করা হয়:

  • নোড এন সহ একটি পাতার পোস্ট-অর্ডার ট্রভারসালাল তালিকা [ এন ]।
  • নোড এন এবং সাব-ট্রি (এল, আর) সমন্বিত একটি শাখার পোস্ট-অর্ডার ট্র্যাভারসাল হ'ল তালিকা পোস্টর্ডার ( এল ) +  পোস্টর্ডার ( আর ) + [ এন ]।

উপরের গাছের জন্য, এটি [1, 2, 9, 8, 3, 5, 7, 4, 6]


ইন-অর্ডার ট্র্যাভেরসাল একটি পূর্ণ বাইনারি গাছের যাও recursively অনুসরণ হিসাবে সংজ্ঞায়িত করা হয়:

  • একটি ইন-অর্ডার ট্র্যাভেরসাল পাতার একটি নোড ধারণকারী এন তালিকা [হল এন ]।
  • নোড এন এবং সাব-ট্রি (এল, আর) সমন্বিত একটি শাখার ইন-অর্ডার ট্র্যাভারসাল হ'ল তালিকার ইনঅর্ডার ( এল ) + [ এন ] +  ইনঅর্ডার ( আর )।

উপরের গাছের জন্য, এটি [1, 3, 2, 8, 9, 6, 5, 4, 7]


উপসংহারে: তালিকার জুটি দেওয়া [,, ৩, ১, ৮, ২, ৯, ৪, ৫,]] (পূর্ব) এবং [১, ২, ৯, ৮, ৩, ৫,,, ৪,]] (পোস্ট) ইনপুট হিসাবে, আপনার প্রোগ্রামের আউটপুট হওয়া উচিত [1, 3, 2, 8, 9, 6, 5, 4, 7]

পরীক্ষার মামলা

প্রতিটি পরীক্ষার কেস ফরম্যাটে থাকে preorder, postorder → expected output

[8], [8] → [8]
[3,4,5], [4,5,3] → [4,3,5]
[1,2,9,8,3], [9,8,2,3,1] → [9,2,8,1,3]
[7,8,10,11,12,2,3,4,5], [11,12,10,2,8,4,5,3,7] → [11,10,12,8,2,7,4,3,5]
[1,2,3,4,5,6,7,8,9], [5,6,4,7,3,8,2,9,1] → [5,4,6,3,7,2,8,1,9]

যেহেতু ইনপুটটির নির্দিষ্ট আকার (সম্পূর্ণ বাইনারি ট্রি) থাকার গ্যারান্টিযুক্ত তাই আপনার সত্যই উভয় ইনপুট লাগবে না, তাই না?
feersum

বাইনারি গাছটি পূর্ণ , তবে সম্পূর্ণ নয় , সুতরাং একটি এন- এলিমেন্ট গাছের অনেকগুলি আকার থাকতে পারে এবং সাধারণভাবে, আপনার উভয়ের প্রয়োজন।
লিন

আমি আদেশগুলির জন্য স্ট্রিং প্রদান করে একক অক্ষর হিসাবে নোডগুলিকে উপস্থাপন করতে পারি। যেমন দ্বিতীয় উদাহরণ হয়ে হবে: "CDE" and "DEC" give "DCE"? (এমনকি যদি আমাকে প্রচুর নোডের প্রয়োজন হয় তবে ইউনিকোড অক্ষর ব্যবহার করে)
টন হসপেল

@ টনহোপেল আমি এটির সাথে ঠিক আছি - যুক্তিযুক্তভাবে, আপনি যা করছেন তা পূর্ণসংখ্যার একটি তালিকাটির সংজ্ঞাটি কিছুটা প্রসারিত করে , কারণ :) এর "CDE"থেকে খুব আলাদা নয় [67, 68, 69]:)
লিন

উত্তর:


2

পার্ল, 69 66 62 56 53 বাইট

এর জন্য +1 অন্তর্ভুক্ত -p

পোস্টর্ডারটি পরে প্রি অর্ডারটি অনুসরণ করে একটি লাইন STDIN এ স্থান দ্বারা পৃথক করা হয়েছে (প্রাক এবং পোস্টের ক্রমটি লক্ষ্য করুন)। নোডগুলি অনন্য অক্ষর হিসাবে উপস্থাপিত হয় (কোনও অক্ষর যা স্থান বা নিউলাইন ঠিক নয়)।

inpost.pl <<< "98231 12983"

inpost.pl:

#!/usr/bin/perl -p
s%(.)(.)+\K(.)(.+)\3(\1.*)\2%$4$5$3$2%&&redo;s;.+ ;;

মূল একক সংখ্যাসূচক ফর্ম্যাটটি ব্যবহার করে একক সংখ্যাটি হুবহু চিহ্নিত করতে আরও অনেক যত্নের প্রয়োজন হয় এবং এটি 73 বাইটে আসে

#!/usr/bin/perl -p
s%\b(\d+)(,\d+)+\K,(\d+\b)(.+)\b\3,(\1\b.*)\2\b%$4$5,$3$2%&&redo;s;.+ ;;

হিসাবে ব্যবহার

inpostnum.pl <<< "11,12,10,2,8,4,5,3,7 7,8,10,11,12,2,3,4,5"

-p;শেষে একটি যোগ করুন, যাতে আপনার শেষের দরকার নেই ;s;.* ;;->s;.* ;
রিলে

@ রিলে আমি জানি এজন্য আমার ;শেষে আছে। কিন্তু -পি আসলে \n;একটি -eপ্রোগ্রামের শেষে যোগ করে । কোনও ফাইলে এটি যুক্ত হয় কেবলমাত্র ;এবং কেবল যদি ফাইলটি শেষ না হয় \n। যেহেতু আমি -p+1 হিসাবে দাবি করতে চাই এবং +3 না হিসাবে প্রোগ্রামটি কমান্ডলাইন থেকে কাজ করা দরকার, তাইও -e। এবং আমি তারপরে যে আউটপুটটি পেতে পারি
তাতে উত্সাহী নিউলাইনটি

আপনি যদি কমান্ডলাইনে চালনা করেন তবে আপনার 'চারপাশের দরকার নেই ? আপনি যদি এটি এটি চালান তবে (ফাইল দিয়ে কল করুন <<<) আপনি শেষটি ছেড়ে দিতে পারেন ;
রিলে

@ রিলে এটি পার্লের জন্য স্কোরিং পদ্ধতির ব্যাখ্যার উপর নির্ভর করে। আমি সাধারণত ফাইল হিসাবে আমার কোড জমা করি যেহেতু আমি মনে করি এটি ক্ষুদ্রতর সংক্ষিপ্ত। তবে আপনি যদি আমার সাবমিশনের দিকে লক্ষ্য করেন তবে আপনি দেখতে পাবেন যে কোডটি অবশ্যই কোনও ফাইলে থাকতে হবে (কারণ যেমন এটির 'ব্যবহার বা ব্যবহার do$0ইত্যাদি) আমি সর্বদা -p+3 (স্থান, বিয়োগ, পি) হিসাবে স্কোর করি তবে কোডটিও যদি কাজ করে তবে যে কমান্ডলাইনে আপনি পান -eএবং 'বিনা +1e
পয়সায়

ঠিক আছে, আমি ঠিক কীভাবে কমান্ড লাইন জমা দেওয়ার স্কোর সম্পর্কে পরিষ্কার ছিল না was আমি বুঝতে পারিনি যে আপনি 'বিনামূল্যে পাচ্ছেন । যে পরিষ্কার করার জন্য ধন্যবাদ।
রিলে


2

জাভাস্ক্রিপ্ট (ES6), 100 বাইট

f=(s,t,l=t.search(s[1]))=>s[1]?f(s.slice(1,++l+1),t.slice(0,l))+s[0]+f(s.slice(l+1),t.slice(l)):s[0]

আই / ও "নিরাপদ" অক্ষরের স্ট্রিংগুলিতে রয়েছে (যেমন অক্ষর বা অঙ্ক)। বিকল্প পদ্ধতি, এছাড়াও 100 বাইট:

f=(s,t,a=0,b=0,c=s.length-1,l=t.search(s[a+1])-b)=>c?f(s,t,a+1,b,l)+s[a]+f(s,t,l+2+a,l+1,c-l-2):s[a]
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.