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     }
  • 相关阅读:
    HTTP状态码及其含义
    c和python解决各种字符串反转问题的不同思路
    Python找出一串字符中出现最多的字符
    3个基本算法的实现技巧
    一种字符串搜索方法
    数据库开发经典总结
    apt、dpkg参数整理
    Python集合(set)类型的操作
    Python和Decorator(装饰器)模式
    Git使用基础
  • 原文地址:https://www.cnblogs.com/jcliBlogger/p/4548032.html
Copyright © 2011-2022 走看看