BFS से एरोनियस राइट चाइल्ड पॉइंटर (सेम लेवल पर पॉइंट करता हुआ) ढूंढें और उस नोड को उसके डिसेंडेंट्स सहित डिलीट करें (टारगेट नोड छोड़कर)।
एल्गोरिदम
- क्यू से BFS ट्रैवर्सल (
collections.deque)। parentमैप: चाइल्ड -> (पैरेंट, is_left)।visitedसेट से डुप्लिकेट विजिट डिटेक्ट करें (एरोनियस लिंक)।- जब डुप्लिकेट मिले: ग्रैंडपैरेंट ढूंढें और उसका लेफ्ट/राइट पॉइंटर None करें।
- रूट रिटर्न करें।
उदाहरण कोड
import collections
class TreeNode:
def __init__(self, data, left=None, right=None):
self.data = data
self.left = left
self.right = right
def solve(root):
q = collections.deque([root])
p, visited = dict(), set()
while q:
cur = q.popleft()
if cur in visited:
grand_p, is_left = p[p[cur][0]]
if is_left: grand_p.left = None
else: grand_p.right = None
return root
visited.add(cur)
if cur.left:
p[cur.left] = (cur, 1)
q.append(cur.left)
if cur.right:
p[cur.right] = (cur, 0)
q.append(cur.right)
return root
# टेस्ट: 4 का राइट पॉइंटर गलती से 6 पर -> 4 डिलीट, इनऑर्डर: 2,3,5,6,7,8
इनपुट/आउटपुट
इनपुट: ट्री [5,3,7,2,4,6,8] + एरोनियस लिंक 4→6
आउटपुट (इनऑर्डर): 2, 3, 5, 6, 7, 8