# include  <iostream> # include  <queue> struct  TreeNode  { int  val; TreeNode*  left; TreeNode*  right; TreeNode ( int  x)  :  val ( x) ,  left ( nullptr ) ,  right ( nullptr )  { } 
} ; int  maxDepth ( TreeNode*  root)  { if  ( root ==  nullptr )  { return  0 ; } std:: queue< TreeNode* >  q; q. push ( root) ; int  depth =  0 ; while  ( ! q. empty ( ) )  { int  levelSize =  q. size ( ) ; depth++ ;  for  ( int  i =  0 ;  i <  levelSize;  i++ )  { TreeNode*  node =  q. front ( ) ; q. pop ( ) ; if  ( node-> left !=  nullptr )  { q. push ( node-> left) ; } if  ( node-> right !=  nullptr )  { q. push ( node-> right) ; } } } return  depth; 
} int  main ( )  { TreeNode*  root =  new  TreeNode ( 1 ) ; root-> left =  new  TreeNode ( 2 ) ; root-> right =  new  TreeNode ( 3 ) ; root-> left-> left =  new  TreeNode ( 4 ) ; root-> left-> right =  new  TreeNode ( 5 ) ; root-> right-> right =  new  TreeNode ( 6 ) ; std:: cout <<  "Depth of the tree: "  <<  maxDepth ( root)  <<  std:: endl; delete  root-> left-> left; delete  root-> left-> right; delete  root-> right-> right; delete  root-> left; delete  root-> right; delete  root; return  0 ; 
} # include  <iostream> # include  <stack> # include  <vector> struct  TreeNode  { int  val; TreeNode*  left; TreeNode*  right; TreeNode ( int  x)  :  val ( x) ,  left ( nullptr ) ,  right ( nullptr )  { } 
} ; std:: vector< int >  preorderTraversal ( TreeNode*  root)  { std:: vector< int >  result; std:: stack< TreeNode* >  stk; TreeNode*  current =  root; while  ( current !=  nullptr  ||  ! stk. empty ( ) )  { if  ( current !=  nullptr )  { result. push_back ( current-> val) ; if  ( current-> right !=  nullptr )  { stk. push ( current-> right) ; } current =  current-> left; }  else  { current =  stk. top ( ) ; stk. pop ( ) ; } } return  result; 
} int  main ( )  { TreeNode*  root =  new  TreeNode ( 1 ) ; root-> left =  new  TreeNode ( 2 ) ; root-> right =  new  TreeNode ( 3 ) ; root-> left-> left =  new  TreeNode ( 4 ) ; root-> left-> right =  new  TreeNode ( 5 ) ; std:: vector< int >  result =  preorderTraversal ( root) ; std:: cout <<  "Preorder traversal result: " ; for  ( int  num :  result)  { std:: cout <<  num <<  " " ; } std:: cout <<  std:: endl; delete  root-> left-> left; delete  root-> left-> right; delete  root-> left; delete  root-> right; delete  root; return  0 ; 
} 
# include  <iostream> # include  <stack> # include  <vector> struct  TreeNode  { int  val; TreeNode*  left; TreeNode*  right; TreeNode ( int  x)  :  val ( x) ,  left ( nullptr ) ,  right ( nullptr )  { } 
} ; std:: vector< int >  inorderTraversal ( TreeNode*  root)  { std:: vector< int >  result; std:: stack< TreeNode* >  stk; TreeNode*  current =  root; while  ( current !=  nullptr  ||  ! stk. empty ( ) )  { if  ( current !=  nullptr )  { stk. push ( current) ; current =  current-> left; }  else  { current =  stk. top ( ) ; stk. pop ( ) ; result. push_back ( current-> val) ; current =  current-> right; } } return  result; 
} int  main ( )  { TreeNode*  root =  new  TreeNode ( 1 ) ; root-> left =  new  TreeNode ( 2 ) ; root-> right =  new  TreeNode ( 3 ) ; root-> left-> left =  new  TreeNode ( 4 ) ; root-> left-> right =  new  TreeNode ( 5 ) ; std:: vector< int >  result =  inorderTraversal ( root) ; std:: cout <<  "Inorder traversal result: " ; for  ( int  num :  result)  { std:: cout <<  num <<  " " ; } std:: cout <<  std:: endl; delete  root-> left-> left; delete  root-> left-> right; delete  root-> left; delete  root-> right; delete  root; return  0 ; 
} # include  <iostream> # include  <stack> # include  <vector> struct  TreeNode  { int  val; TreeNode*  left; TreeNode*  right; TreeNode ( int  x)  :  val ( x) ,  left ( nullptr ) ,  right ( nullptr )  { } 
} ; std:: vector< int >  postorderTraversal ( TreeNode*  root)  { std:: vector< int >  result; std:: stack< TreeNode* >  stk; TreeNode*  current =  root; TreeNode*  lastVisited =  nullptr ; while  ( current !=  nullptr  ||  ! stk. empty ( ) )  { if  ( current !=  nullptr )  { stk. push ( current) ; current =  current-> left; }  else  { TreeNode*  topNode =  stk. top ( ) ; if  ( topNode-> right ==  nullptr  ||  topNode-> right ==  lastVisited)  { result. push_back ( topNode-> val) ; lastVisited =  topNode; stk. pop ( ) ; }  else  { current =  topNode-> right; } } } return  result; 
} int  main ( )  { TreeNode*  root =  new  TreeNode ( 1 ) ; root-> left =  new  TreeNode ( 2 ) ; root-> right =  new  TreeNode ( 3 ) ; root-> left-> left =  new  TreeNode ( 4 ) ; root-> left-> right =  new  TreeNode ( 5 ) ; std:: vector< int >  result =  postorderTraversal ( root) ; std:: cout <<  "Postorder traversal result: " ; for  ( int  num :  result)  { std:: cout <<  num <<  " " ; } std:: cout <<  std:: endl; delete  root-> left-> left; delete  root-> left-> right; delete  root-> left; delete  root-> right; delete  root; return  0 ; 
}