मान लीजिए कि हमारे पास n नोड्स वाला एक पेड़ है जिसकी संख्या 0 से n-1 तक है। पेड़ माता-पिता सरणी द्वारा दिया जाता है, जहां माता-पिता [i] नोड i के माता-पिता हैं। पेड़ की जड़ नोड 0 है। हमें किसी दिए गए नोड के kth पूर्वज को खोजना होगा, यदि पूर्वज मौजूद नहीं है, तो वापसी -1
तो, अगर इनपुट पसंद है

तो आउटपुट 2 होगा क्योंकि नोड 6 का पहला पूर्वज 5 है और दूसरा 2 है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
फ़ंक्शन को हल करें () परिभाषित करें। यह पैरेंट, नोड, k
. लेगा -
यदि नोड -1 के समान है, तो
-
वापसी -1
-
-
अन्यथा जब k 1 के समान हो, तब
-
माता-पिता को लौटाएं [नोड]
-
-
अन्यथा जब (k और k-1) शून्य हो, तब
-
रिटर्न सॉल्व (पैरेंट, सॉल्व (पैरेंट, नोड, के / 2 का भागफल), के / 2 का भागफल)
-
-
अन्यथा,
-
एमएसबी:=2^(के -1 के बिट्स की संख्या)
-
रिटर्न सॉल्व (पैरेंट, सॉल्व (पैरेंट, नोड, के-एमएसबी), एमएसबी)
-
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें
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