मान लीजिए कि हमारे पास एक बाइनरी ट्री है, हमें किसी भी नोड और उसके वंशजों के बीच सबसे बड़ा निरपेक्ष अंतर खोजना होगा।
तो, अगर इनपुट पसंद है
तो आउटपुट 7 होगा क्योंकि नोड्स 8 और 1 के बीच सबसे बड़ा पूर्ण अंतर है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- एक फ़ंक्शन को परिभाषित करें dfs() । यह नोड लेगा
- यदि नोड रिक्त नहीं है, तो
- सकारात्मक और नकारात्मक अनंत के साथ एक सूची लौटाएं
- बाएं:=dfs (नोड के बाएं)
- दाएं:=dfs (नोड के दाएं)
- res :=एक जोड़ी (न्यूनतम बाएँ[0], दाएँ[0] और नोड का मान, और अधिकतम बाएँ[1], दाएँ[1] और नोड का मान)
- Ans :=अधिकतम उत्तर, (नोड का मान - res[0]) और (res[1] - नोड का मान)
- रिटर्न रेस
- मुख्य विधि से, निम्न कार्य करें -
- उत्तर:=0
- dfs(रूट)
- वापसी उत्तर
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
class TreeNode: def __init__(self, data, left = None, right = None): self.val = data self.left = left self.right = right class Solution: def solve(self, root): def dfs(node): if not node: return [float("inf"), float("-inf")] left = dfs(node.left) right = dfs(node.right) res = [min(left[0], right[0], node.val), max(left[1], right[1], node.val)] self.ans = max(self.ans, node.val - res[0], res[1] - node.val) return res self.ans = 0 dfs(root) return self.ans ob = Solution() root = TreeNode(1) root.left = TreeNode(5) root.right = TreeNode(3) root.right.left = TreeNode(2) root.right.right = TreeNode(8) root.right.left.left = TreeNode(7) root.right.left.right = TreeNode(4) print(ob.solve(root))
इनपुट
root = TreeNode(1) root.left = TreeNode(5) root.right = TreeNode(3) root.right.left = TreeNode(2) root.right.right = TreeNode(8) root.right.left.left = TreeNode(7) root.right.left.right = TreeNode(4)
आउटपुट
7