class  TreeNode : def  __init__ ( self,  val= 0 ,  left= None ,  right= None ) : self. val =  valself. left =  leftself. right =  rightclass  Solution : def  preorderTraversal ( self,  root:  TreeNode)  - >  list [ int ] : if  not  root: return  [ ] left =  self. preorderTraversal( root. left) right =  self. preorderTraversal( root. right) return  [ root. val]  +  left +  rightdef  inorderTraversal ( self,  root:  TreeNode)  - >  list [ int ] : if  not  root: return  [ ] left =  self. preorderTraversal( root. left) right =  self. preorderTraversal( root. right) return  left +  [ root. val]  +  rightdef  postorderTraversal ( self,  root:  TreeNode)  - >  list [ int ] : if  not  root: return  [ ] left =  self. preorderTraversal( root. left) right =  self. preorderTraversal( root. right) return  left +  right +  [ root. val] 
class  TreeNode : def  __init__ ( self,  val= 0 ,  left= None ,  right= None ) : self. val =  valself. left =  leftself. right =  rightclass  Solution : def  preorderTraversal ( self,  root:  TreeNode)  - >  list [ int ] : if  not  root: return  [ ] stack =  [ root] result =  [ ] while  stack: node =  stack. pop( ) result. append( node. val) if  node. right: stack. append( node. right) if  node. left: stack. append( node. left) return  resultdef  inorderTraversal ( self,  root:  TreeNode)  - >  list [ int ] : if  not  root: return  [ ] stack =  [ ]   result =  [ ] cur =  rootwhile  cur or  stack: if  cur: stack. append( cur) cur =  cur. leftelse : cur =  stack. pop( ) result. append( cur. val) cur =  cur. rightreturn  resultdef  postorderTraversal ( self,  root:  TreeNode)  - >  list [ int ] : if  not  root: return  [ ] stack =  [ root] result =  [ ] while  stack: node =  stack. pop( ) result. append( node. val) if  node. left: stack. append( node. left) if  node. right: stack. append( node. right) return  result[ : : - 1 ] 
class  TreeNode : def  __init__ ( self,  val= 0 ,  left= None ,  right= None ) : self. val =  valself. left =  leftself. right =  rightclass  Solution : def  preorderTraversal ( self,  root:  TreeNode)  - >  list [ int ] : result =  [ ] st =  [ ] if  root: st. append( root) while  st: node =  st. pop( ) if  node !=  None : if  node. right:   st. append( node. right) if  node. left:   st. append( node. left) st. append( node)   st. append( None ) else : node =  st. pop( ) result. append( node. val) return  resultdef  inorderTraversal ( self,  root:  TreeNode)  - >  list [ int ] : result =  [ ] st =  [ ] if  root: st. append( root) while  st: node =  st. pop( ) if  node !=  None : if  node. right:   st. append( node. right) st. append( node)   st. append( None )   if  node. left:   st. append( node. left) else :   node =  st. pop( )   result. append( node. val)   return  resultdef  postorderTraversal ( self,  root:  TreeNode)  - >  list [ int ] : result =  [ ] st =  [ ] if  root: st. append( root) while  st: node =  st. pop( ) if  node !=  None : st. append( node)   st. append( None ) if  node. right:   st. append( node. right) if  node. left:   st. append( node. left) else : node =  st. pop( ) result. append( node. val) return  resultfrom  collections import  dequeclass  TreeNode : def  __init__ ( self,  val= 0 ,  left= None ,  right= None ) : self. val =  valself. left =  leftself. right =  rightclass  Solution : def  levelOrder ( self,  root:  TreeNode)  - >  list [ int ] : if  not  root: return  [ ] queue =  deque( [ root] ) result =  [ ] while  queue: node =  queue. popleft( ) result. append( node. val) if  node. left: queue. append( node. left) if  node. right: queue. append( node. right) return  result