मान लीजिए, हमें एक बाइनरी ट्री और एक नोड दिया गया है जो बाइनरी ट्री के पत्ते पर स्थित है। हमें लीफ नोड को बाइनरी ट्री का रूट नोड बनाना है। हम इसे निम्नलिखित तरीके से कर सकते हैं -
-
यदि नोड में एक बायाँ बच्चा है, तो वह दायाँ बच्चा बन जाता है।
-
एक नोड का माता-पिता उसका बायां बच्चा बन जाता है। इस प्रक्रिया में, पैरेंट नोड का उस नोड से लिंक शून्य हो जाता है, इसलिए इसमें केवल एक बच्चा होगा।
पेड़ की नोड संरचना नीचे की तरह है -
TreeNode: data: <integer> left: <pointer of TreeNode> right: <pointer of TreeNode> parent: <pointer of TreeNode>
हमें बदले हुए पेड़ की जड़ वापस करनी होगी।
तो, अगर इनपुट पसंद है
और नया मूल 8 है; तब रूपांतरित वृक्ष का क्रमागत निरूपण होगा - 2, 3, 4, 5, 7, 6, 8,
पेड़ का नया रूट नोड 8 है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
एक फ़ंक्शन हेल्पर() को परिभाषित करें। यह नोड लेगा, new_par
-
यदि नोड रूट के समान है, तो
-
नोड के जनक :=new_par
-
यदि नोड का बायां हिस्सा new_par के समान है, तो
-
नोड के बाईं ओर:=शून्य
-
-
यदि नोड का अधिकार new_par के समान है, तो
-
नोड का अधिकार:=शून्य
-
-
वापसी जड़
-
-
यदि नोड का बायां भाग शून्य नहीं है, तो
-
नोड के दाएँ:=नोड के बाएँ
-
-
यदि नोड के पैरेंट का बायां नोड नोड के समान है, तो
-
नोड के जनक के बाएँ :=शून्य
-
-
नोड के बाईं ओर:=सहायक (नोड के माता-पिता, नोड)
-
नोड के जनक :=new_par
-
वापसी नोड
-
-
वापसी सहायक (पत्ती, अशक्त)
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
import collections class TreeNode: def __init__(self, data, left = None, right = None, parent = None): self.data = data self.left = left self.right = right self.parent = parent def insert(temp,data): que = [] que.append(temp) while (len(que)): temp = que[0] que.pop(0) if (not temp.left): if data is not None: temp.left = TreeNode(data, parent = temp) else: temp.left = TreeNode(0, parent = temp) break else: que.append(temp.left) if (not temp.right): if data is not None: temp.right = TreeNode(data, parent = temp) else: temp.right = TreeNode(0, parent = temp) break else: que.append(temp.right) def make_tree(elements): Tree = TreeNode(elements[0]) for element in elements[1:]: insert(Tree, element) return Tree def search_node(root, element): if (root == None): return None if (root.data == element): return root res1 = search_node(root.left, element) if res1: return res1 res2 = search_node(root.right, element) return res2 def print_tree(root): if root is not None: print_tree(root.left) print(root.data, end = ', ') print_tree(root.right) def solve(root, leaf): def helper(node, new_par): if node == root: node.parent = new_par if node.left == new_par: node.left = None if node.right == new_par: node.right = None return root if node.left: node.right = node.left if node.parent.left == node: node.parent.left = None node.left = helper(node.parent, node) node.parent = new_par return node return helper(leaf, None) root = make_tree([5, 3, 7, 2, 4, 6, 8]) root = solve(root, search_node(root, 8)) print_tree(root)
इनपुट
root = make_tree([5, 3, 7, 2, 4, 6, 8]) root = solve(root, search_node(root, 8))
आउटपुट
2, 3, 4, 5, 7, 6, 8,