Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Solution:
- def printBoundaryView(self, root):
- def l(root):
- if not root:return []
- ans,x=[],root
- while x:
- if not x.left and not x.right:
- return list(ans)
- ans.append(x.data)
- if x.left:x=x.left
- else:x=x.right
- def r(root):
- if not root:return []
- ans,x=deque(),root
- while x:
- if not x.left and not x.right:
- return list(ans)
- ans.appendleft(x.data)
- if x.right:x=x.right
- else:x=x.left
- return ans
- t=[]#for storing leaves not included root
- def preorder(x):# only store leaves
- if not x:return
- if not x.left and not x.right and x!=root:t.append(x.data)
- preorder(x.left)
- preorder(x.right)
- preorder(root)
- ans=[root.data]
- if root.left:
- ans+=l(root.left)
- ans+=t
- if root.right:
- ans+=r(root.right)
- return ans
- #{
- # Driver Code Starts
- #Initial Template for Python 3
- # function should return a list containing the boundary view of the binary tree
- #{
- # Driver Code Starts
- import sys
- import sys
- sys.setrecursionlimit(100000)
- #Contributed by Sudarshan Sharma
- from collections import deque
- # Tree Node
- class Node:
- def __init__(self, val):
- self.right = None
- self.data = val
- self.left = None
- # Function to Build Tree
- def buildTree(s):
- #Corner Case
- if(len(s)==0 or s[0]=="N"):
- return None
- # Creating list of strings from input
- # string after spliting by space
- ip=list(map(str,s.split()))
- # Create the root of the tree
- root=Node(int(ip[0]))
- size=0
- q=deque()
- # Push the root to the queue
- q.append(root)
- size=size+1
- # Starting from the second element
- i=1
- while(size>0 and i<len(ip)):
- # Get and remove the front of the queue
- currNode=q[0]
- q.popleft()
- size=size-1
- # Get the current node's value from the string
- currVal=ip[i]
- # If the left child is not null
- if(currVal!="N"):
- # Create the left child for the current node
- currNode.left=Node(int(currVal))
- # Push it to the queue
- q.append(currNode.left)
- size=size+1
- # For the right child
- i=i+1
- if(i>=len(ip)):
- break
- currVal=ip[i]
- # If the right child is not null
- if(currVal!="N"):
- # Create the right child for the current node
- currNode.right=Node(int(currVal))
- # Push it to the queue
- q.append(currNode.right)
- size=size+1
- i=i+1
- return root
- if __name__=="__main__":
- t=int(input())
- for _ in range(0,t):
- s=input()
- root=buildTree(s)
- obj = Solution()
- res = obj.printBoundaryView(root)
- for i in res:
- print (i, end = " ")
- print('')
- # } Driver Code Ends
Advertisement
Add Comment
Please, Sign In to add comment