এখানে উপস্থাপিত বেশিরভাগ উত্তর গভীরতা-প্রথম বা জিগ-জাগ সিকোয়েন্স তৈরি করছে। উদাহরণস্বরূপ নীচের গাছ দিয়ে শুরু:
1 2
/ \ / \
/ \ / \
/ \ / \
/ \ / \
11 12 21 22
/ \ / \ / \ / \
/ \ / \ / \ / \
111 112 121 122 211 212 221 222
ড্যাসব্লিংক্লাইটলাইটের উত্তর এই সমতল ক্রম উত্পাদন করে:
111, 112, 121, 122, 11, 12, 211, 212, 221, 222, 21, 22, 1, 2
কোনামিমানের উত্তর (যা এরিক লিপার্টের উত্তরকে সাধারণীকরণ করে) এই সমতল ক্রমটি তৈরি করে:
2, 22, 222, 221, 21, 212, 211, 1, 12, 122, 121, 11, 112, 111
ইভান স্টয়েভের উত্তর এই সমতল ক্রম উত্পাদন করে:
1, 11, 111, 112, 12, 121, 122, 2, 21, 211, 212, 22, 221, 222
আপনি যদি এর মতো প্রস্থের প্রথম ক্রমটিতে আগ্রহী হন :
1, 2, 11, 12, 21, 22, 111, 112, 121, 122, 211, 212, 221, 222
... তবে এটি আপনার জন্য সমাধান:
public static IEnumerable<T> Flatten<T>(this IEnumerable<T> source,
Func<T, IEnumerable<T>> childrenSelector)
{
var queue = new Queue<T>(source);
while (queue.Count > 0)
{
var current = queue.Dequeue();
yield return current;
var children = childrenSelector(current);
if (children == null) continue;
foreach (var child in children) queue.Enqueue(child);
}
}
বাস্তবায়নের পার্থক্যটি মূলত একটি এর Queue
পরিবর্তে ব্যবহার করে Stack
। কোন আসল বাছাই হচ্ছে না।
সাবধানতা: এই প্রয়োগটি স্মৃতি-দক্ষতা সম্পর্কিত অনুকূল থেকে অনেক দূরে, যেহেতু মোট সংখ্যার উপাদানগুলির একটি বিশাল শতাংশ গণনার সময় অভ্যন্তরীণ কাতারে সংরক্ষণ করা হবে being Stack
বেসড ট্রি-ট্র্যাভারসাল- Queue
ভিত্তিক বাস্তবায়নগুলির চেয়ে মেমরির ব্যবহার সম্পর্কে অনেক বেশি দক্ষ ।