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

    Well, I do not see what this problem is for. The same code of Binary Tree Level Order Traversal can be used here. The only difference is that we should reverse the result before we return. 

    Again, both BFS and DFS solutions.

    BFS:

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

    DFS:

     1     vector<vector<int>> levelOrderBottom(TreeNode *root) {
     2         vector<vector<int>> levels;
     3         if(!root) return levels;
     4         int curLevel = 1;
     5         bool nextLevel = true;
     6         while(nextLevel) {
     7             vector<int> level;
     8             nextLevel = false;
     9             levelTraverse(root, curLevel, nextLevel, level);
    10             levels.push_back(level);
    11             curLevel++;
    12         }
    13         reverse(levels.begin(), levels.end());
    14         return levels;
    15     }
    16     void levelTraverse(TreeNode* node, int curLevel, bool& nextLevel, vector<int>& level) {
    17         if(!node) return;
    18         if(curLevel == 1) {
    19             level.push_back(node -> val);
    20             if(node -> left || node -> right) nextLevel = true;
    21         }
    22         else {
    23             levelTraverse(node -> left, curLevel - 1, nextLevel, level);
    24             levelTraverse(node -> right, curLevel - 1, nextLevel, level);
    25         }
    26     }
  • 相关阅读:
    U盘 格式化 ext3 ext4
    MBR
    CentOS开机的时候卡在进度条一直进不去 F5(是关键)
    redis储存中文,客服端读取出现乱码
    redis 做为缓存服务器 注项!
    redis监控
    keepalived virtual_router_id 44
    你真的会用Gson吗?Gson使用指南
    你真的会用Retrofit2吗?Retrofit2完全教程
    Kotlin 初级读本
  • 原文地址:https://www.cnblogs.com/jcliBlogger/p/4548032.html
Copyright © 2011-2022 走看看