To being honest, I do not know whether this problem are designed to let you use stacks. Anyway, I don ' t. Here is my codes, both BFS and DFS version.
1 //BFS2vector<vector<int>> Zigzaglevelorder (treenode*root) {3vector<vector<int> >levels;4 if(!root)returnlevels;5Queue<treenode*>tovisit;6 Tovisit.push (root);7 intCurlevelnodes =1;8 BOOLFlag =false;9 while(!Tovisit.empty ()) {Tenvector<int>Level ; One for(inti =0; i < curlevelnodes; i++) { Atreenode* node =Tovisit.front (); - Tovisit.pop (); -Level.push_back (Node-val); the if(node-to-left) Tovisit.push (node-Left ); - if(node-right) Tovisit.push (node-Right ); - } - if(flag) { + Reverse (Level.begin (), Level.end ()); -Flag =false; + } A ElseFlag =true; at levels.push_back (level); -Curlevelnodes =tovisit.size (); - } - returnlevels; - } - in //DFS - voidDFS (treenode* node,intCurlevel,BOOL& Nextlevel, vector<int>&Level ) { to if(!node)return; + if(Curlevel = =1) { -Level.push_back (Node-val); the if(Node-left | | node-right) Nextlevel =true; * } $ Else {Panax NotoginsengDFS (node-left, Curlevel-1, Nextlevel, level); -DFS (node-right, Curlevel-1, Nextlevel, level); the } + } Avector<vector<int> > Zigzaglevelorder (treenode*root) { thevector<vector<int> >levels; + if(!root)returnlevels; - intCurlevel =1; $ BOOLNextlevel =true, flag =false; $ while(nextlevel) { -Nextlevel =false; -vector<int>Level ; theDFS (Root, curlevel++, Nextlevel, level); - if(flag) {Wuyi Reverse (Level.begin (), Level.end ()); theFlag =false; - } Wu ElseFlag =true; - levels.push_back (level); About } $ returnlevels; -}
Update
Thanks to the remind of Ljdsoft1, I had rewritten the code to traverse the nodes in Ziazag-order instead of simply revers ing it. The code is as follows, using the stacks.
1 classSolution {2 Public:3vector<vector<int>> Zigzaglevelorder (treenode*root) {4vector<vector<int> >levels;5 if(!root)returnlevels;6Stack<treenode*>Curlevel, Nextlevel;7 Curlevel.push (root);8 BOOLReversed =false;9 while(!Curlevel.empty ()) { Tenvector<int>Level ; One while(!Curlevel.empty ()) { Atreenode* node =curlevel.top (); - Curlevel.pop (); -Level.push_back (Node-val); the if(reversed) { - if(node-right) Nextlevel.push (node-Right ); - if(node-to-left) Nextlevel.push (node-Left ); - } + Else { - if(node-to-left) Nextlevel.push (node-Left ); + if(node-right) Nextlevel.push (node-Right ); A } at } - levels.push_back (level); - swap (Curlevel, nextlevel); -Reversed =!reversed; - } - returnlevels; in } -};
[Leetcode] Binary Tree Zigzag level Order traversal