zoukankan      html  css  js  c++  java
  • [LeetCode] Binary Tree Zigzag Level Order Traversal

    To be honest, this problem is designed to let you use stacks. However, I don't. In fact, you only need to keep a  flag and switch it between  false and true (initialize to false ). When it is  true , reverse the current level before adding it to the result.

    Again, BFS and DFS solutions are provided.

    BFS:

     1     vector<vector<int>> zigzagLevelOrder(TreeNode* root) {
     2         vector<vector<int> > levels;
     3         if (!root) return levels;
     4         queue<TreeNode*> toVisit;
     5         toVisit.push(root);
     6         int curLevelNodes = 1;
     7         bool flag = false;
     8         while (!toVisit.empty()) {
     9             vector<int> level;
    10             for (int i = 0; i < curLevelNodes; i++) {
    11                 TreeNode* node = toVisit.front();
    12                 toVisit.pop();
    13                 level.push_back(node -> val);
    14                 if (node -> left) toVisit.push(node -> left);
    15                 if (node -> right) toVisit.push(node -> right);
    16             }
    17             if (flag) {
    18                 reverse(level.begin(), level.end());
    19                 flag = false;
    20             }
    21             else flag = true;
    22             levels.push_back(level);
    23             curLevelNodes = toVisit.size();
    24         }
    25         return levels;
    26     }

    DFS:

     1 void dfs(TreeNode* node, int curLevel, bool& nextLevel, vector<int>& level) {
     2         if (!node) return;
     3         if (curLevel == 1) {
     4             level.push_back(node -> val);
     5             if (node -> left || node -> right) nextLevel = true;
     6         }
     7         else {
     8             dfs(node -> left, curLevel - 1, nextLevel, level);
     9             dfs(node -> right, curLevel - 1, nextLevel, level);
    10         }
    11     }
    12     vector<vector<int> > zigzagLevelOrder(TreeNode* root) {
    13         vector<vector<int> > levels;
    14         if (!root) return levels;
    15         int curLevel = 1;
    16         bool nextLevel = true, flag = false;
    17         while (nextLevel) {
    18             nextLevel = false;
    19             vector<int> level;
    20             dfs(root, curLevel++, nextLevel, level);
    21             if (flag) {
    22                 reverse(level.begin(), level.end());
    23                 flag = false;
    24             } 
    25             else flag = true;
    26             levels.push_back(level);
    27         }
    28         return levels;
    29     }
  • 相关阅读:
    关键字static
    关键字const有什么含义?
    关于目标
    B/B+树的初步理解(一)
    优先队列(priority_queue)
    哨兵的作用
    数学笑话集(一)

    排序算法小结(一)
    KMP算法
  • 原文地址:https://www.cnblogs.com/jcliBlogger/p/4548038.html
Copyright © 2011-2022 走看看