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