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     }
  • 相关阅读:
    发音技巧
    SCROM标准和一些概念(转)
    我要告诉测试新手的 (转)
    LCMS与LMS
    SCORM标准的LMS ELearning 学习平台介绍
    【转载】经常在网上看人家的帖子,分享给组里面的兄弟共赏
    选择学习管理系统(LMS)不可忽略的十大要素
    委托(delegate)的使用
    LMS/LCMS相关概念简介
    软件测试
  • 原文地址:https://www.cnblogs.com/jcliBlogger/p/4548032.html
Copyright © 2011-2022 走看看