N 叉树的层序遍历 vector< vector< int >>  levelOrder ( Node*  root)  { vector< vector< int >>  ret; if  ( root ==  nullptr )  return  ret; queue< Node* >  q; q. push ( root) ; ret. push_back ( { root-> val} ) ; int  size =  1 ; while  ( ! q. empty ( ) )  { vector< int >  v; while  ( size-- )  { Node*  front =  q. front ( ) ; q. pop ( ) ; for  ( Node*  e :  front-> children)  { if  ( e !=  nullptr )  { q. push ( e) ; v. push_back ( e-> val) ; } } } if  ( ! v. empty ( ) )  { ret. push_back ( v) ; } size =  q. size ( ) ; } return  ret; 
} 
二叉树的锯齿形层序遍历 vector< vector< int >>  zigzagLevelOrder ( TreeNode*  root)  { vector< vector< int >>  ret; if  ( root ==  nullptr )  return  ret; queue< TreeNode* >  q; q. push ( root) ; int  level =  1 ; while  ( ! q. empty ( ) )  { vector< int >  v; int  size =  q. size ( ) ; while  ( size-- )  { TreeNode*  front =  q. front ( ) ; q. pop ( ) ; v. push_back ( front-> val) ; if  ( front-> left !=  nullptr )  { q. push ( front-> left) ; } if  ( front-> right !=  nullptr )  { q. push ( front-> right) ; } } if  ( level %  2  ==  0 )  { reverse ( v. begin ( ) ,  v. end ( ) ) ; } ret. push_back ( v) ; ++ level; } return  ret; 
} 
二叉树最大宽度 int  widthOfBinaryTree ( TreeNode*  root)  { vector< pair< TreeNode* ,  unsigned  int >>  vp_prev =  {  { root,  1 }  } ; unsigned  int  max_size =  0 ; while  ( ! vp_prev. empty ( ) )  { max_size =  max ( max_size,  vp_prev. back ( ) . second -  vp_prev. front ( ) . second +  1 ) ; vector< pair< TreeNode* ,  unsigned  int >>  vp; for  ( auto &  [ x,  y]  :  vp_prev)  { if  ( x-> left !=  nullptr )  { vp. push_back ( {  x-> left,  2  *  y } ) ; } if  ( x-> right !=  nullptr )  { vp. push_back ( {  x-> right,  2  *  y +  1  } ) ; } } vp_prev =   vp; } return  max_size; 
} 
在每个树行中找最大值 vector< int >  largestValues ( TreeNode*  root)  { vector< int >  ret; if  ( root ==  nullptr )  { return  ret; } queue< TreeNode* >  q; q. push ( root) ; while  ( ! q. empty ( ) )  { int  max_val =  INT_MIN; int  size =  q. size ( ) ; while  ( size-- )  { TreeNode*  front =  q. front ( ) ; q. pop ( ) ; if  ( front-> left !=  nullptr )  { q. push ( front-> left) ; } if  ( front-> right !=  nullptr )  { q. push ( front-> right) ; } max_val =  max ( max_val,  front-> val) ; } ret. push_back ( max_val) ; } return  ret; 
}