[leetCode]Binary Tree Level Order Traversal

Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).

For example:
Given binary tree {3,9,20,#,#,15,7},

    3
   / 
  9  20
    /  
   15   7

 return its level order traversal as:

[
  [3],
  [9,20],
  [15,7]
]
思想:链表按层遍历,总体感觉类似多线程在遍历文件时获得文件夹的过程,对于每一层,只获取他的直接子孩子,并加入。
/**
* Definition for binary tree
* struct TreeNode {
*     int val;
*     TreeNode *left;
*     TreeNode *right;
*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
#include <list>
#include <vector>
using namespace std;
struct TreeNode {
    int val;
    TreeNode *left;
    TreeNode *right;     
    TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
class Solution {
public:
    list<vector<TreeNode>> levelNode;
    vector<vector<int>> allLevelval;
    vector<vector<int>> levelOrder(TreeNode *root) {
        vector<TreeNode> curVec;
        vector<int> curIntList;
        if(levelNode.empty() && root != NULL){
            curVec.push_back(*root);
            levelNode.push_back(curVec);
        }
        for(list<vector<TreeNode>>::iterator iter = levelNode.begin();iter != levelNode.end();iter++){
            int size = iter->size();
            curVec.clear();
            curIntList.clear();
            for(int i = 0 ; i< size; i++){
                TreeNode curNode = iter->at(i);
                if(curNode.left != NULL) curVec.push_back(*curNode.left);
                if(curNode.right != NULL) curVec.push_back(*curNode.right);
                curIntList.push_back(curNode.val);
            }
            allLevelval.push_back(curIntList);
            if(curVec.empty()) break;
            levelNode.push_back(curVec);    
        }
        return allLevelval;
    }
};

 对于Binary Tree Level Order Traversal II就很简单了,直接把代码中

allLevelval.push_back(curIntList);

改为

allLevelval.insert(allLevelval.begin(),curIntList);

就OK了,当然粘贴复制的时候要记得两个题的函数名不一样,否则CompileError

艰难的成长
原文地址:https://www.cnblogs.com/marylins/p/3584706.html