কম্পিউটার টিউটোরিয়াল

পাইথনে ট্রি নোডের K-তম পূর্বপুরুষ খুঁজে বের করার প্রোগ্রাম


মান লিজিয়ে আমাদের একটি ট্রি আছে n নোড দিয়ে যা ০ থেকে n-1 পর্যন্ত নম্বরড। ট্রিটি প্যারেন্ট অ্যারে দিয়ে দেওয়া আছে, যেখানে parent[i] হল নোড i-এর প্যারেন্ট। ট্রির রুট হল নোড ০। আমাদের একটি দেওয়া নোডের k-তম পূর্বপুরুষ বের করতে হবে, যদি পূর্বপুরুষ না থাকে তবে -1 রিটার্ন করুন।

যেমন, ইনপুট হলে (চিত্র দেখুন), তবে আউটপুট হবে 2 কারণ নোড ৬-এর প্রথম পূর্বপুরুষ ৫ এবং দ্বিতীয় পূর্বপুরুষ ২।

সমাধানের ধাপসমূহ

  • solve(parent, node, k) ফাংশন ডিফাইন করুন।

  • যদি node == -1 হয়, তবে -1 রিটার্ন করুন।

  • অন্যথায় যদি k == 1 হয়, তবে parent[node] রিটার্ন করুন।

  • অন্যথায় যদি (k & (k-1)) == 0 হয় (অর্থাৎ k ২-এর ঘাত), তবে:

    • solve(parent, solve(parent, node, k//2), k//2) রিটার্ন করুন।

  • অন্যথায়,

    • msb := 1 << (k.bit_length() - 1)

    • solve(parent, solve(parent, node, k-msb), msb) রিটার্ন করুন।

উদাহরণ

নিচের ইমপ্লিমেন্টেশনটি দেখুন:

def solve(parent, node, k):
    if node == -1:
        return -1
    elif k == 1:
        return parent[node]
    elif not (k & (k-1)):
        return solve(parent, solve(parent, node, k >> 1), k >> 1)
    else:
        msb = 1 << (k.bit_length() - 1)
        return solve(parent, solve(parent, node, k - msb), msb)

parent = [-1, 0, 0, 1, 2, 2, 5, 5]
node = 6
k = 2
print(solve(parent, node, k))

ইনপুট

[6,7,9,16,22], 2

আউটপুট

2

  1. পাইথনে বাইনারি ট্রিতে দুটি উপাদানের সাধারণ পূর্বপুরুষ খুঁজে বের করার প্রোগ্রাম

  2. পাইথনে ট্রির বামপাশের গভীরতম নোড খুঁজে বের করার প্রোগ্রাম

  3. পাইথনে বাইনারি সার্চ ট্রিতে k-তম সবচেয়ে ছোট উপাদান খুঁজে বের করার প্রোগ্রাম

  4. পাইথনে বাইনারি ট্রিতে k-দৈর্ঘ্যের পথের সংখ্যা খুঁজে বের করার প্রোগ্রাম