मान लीजिए हमारे पास एक बाइनरी ट्री है; हमें ज़िगज़ैग लेवल ऑर्डर ट्रैवर्सल ढूंढना होगा। तो पहली पंक्ति के लिए, बाएं से दाएं स्कैन करें, फिर दूसरी पंक्ति से दाएं से बाएं, फिर बाएं से दाएं और इसी तरह। तो अगर पेड़ जैसा है -
ट्रैवर्सल अनुक्रम [[3],[20,9],[15,7]]
होगाइसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
अगर पेड़ खाली है, तो खाली सूची लौटाएं
-
कतार:=एक कतार बनाएं और कतार में रूट डालें, दो खाली सूचियां बनाएं और रेस 2, और ध्वज को सही के रूप में सेट करें
-
जबकि कतार खाली नहीं है
-
कतार में मौजूद नोड्स की एक सूची बनाएं, फिर रेस में डालें
-
कतार में मौजूद नोड मानों की एक सूची बनाएं, फिर res2 में डालें
-
अगर झंडा सेट है, तो
-
i :=रेस में अंतिम उप-सूची की लंबाई – 1
-
जबकि मैं>=0
-
यदि रेस में अंतिम उप-सूची के ith तत्व में राइट सबट्री है, तो
-
कतार में दायां सबट्री डालें
-
-
यदि रेस में अंतिम उप-सूची के ith तत्व ने सबट्री छोड़ दी है, तो
-
बाएं सबट्री को कतार में डालें
-
-
मैं 1 से घटाता हूं
-
-
-
अन्यथा
-
i :=रेस में अंतिम उप-सूची की लंबाई – 1
-
जबकि मैं>=0
-
यदि रेस में अंतिम उप-सूची के ith तत्व में राइट सबट्री है, तो
-
कतार में दायां सबट्री डालें
-
-
यदि रेस में अंतिम उप-सूची के ith तत्व ने सबट्री छोड़ दी है, तो
-
बाएं सबट्री को कतार में डालें
-
-
मैं 1 से घटाता हूं
-
-
-
-
वापसी res2
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
class TreeNode: def __init__(self, data, left = None, right = None): self.data = data self.left = left self.right = right 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) else: temp.left = TreeNode(0) break else: que.append(temp.left) if (not temp.right): if data is not None: temp.right = TreeNode(data) else: temp.right = TreeNode(0) break else: que.append(temp.right) def make_tree(elements): Tree = TreeNode(elements[0]) for element in elements[1:]: insert(Tree, element) return Tree class Solution(object): def zigzagLevelOrder(self, root): if not root: return [] queue = [root] res = [] res2=[] flag = True while len(queue)!=0: res.append([i for i in queue]) res2.append([i.data for i in queue if i.data != 0]) queue = [] if flag: i=len(res[-1])-1 while i>=0: if res[-1][i].right: queue.append(res[-1][i].right) if res[-1][i].left: queue.append(res[-1][i].left) i-=1 else: i=len(res[-1])-1 while i>=0: if res[-1][i].left: queue.append(res[-1][i].left) if res[-1][i].right: queue.append(res[-1][i].right) i-=1 flag = not flag return res2 ob = Solution() tree = make_tree([3,9,20,None,None,15,7]) print(ob.zigzagLevelOrder(tree))
इनपुट
[3,9,20,null,null,15,7]
आउटपुट
[[3], [20, 9], [15, 7]]