可以用广度优先(BFS)或者深度优先(DFS)算法遍历:
广度优先(BFS)
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>> out;
queue<TreeNode*> data;
data.push(root);
while(data.size()!=0){
vector<int> level;
int size = data.size();
while(size--){
TreeNode* temp = data.front();
data.pop();
if(!temp)
continue;
level.push_back(temp->val);
data.push(temp->left);
data.push(temp->right);
}
if(level.size()!=0)
out.push_back(level);
}
return out;
}
};
深度优先(DFS)
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>> out;
dfs(out,root,0);
return out;
}
void dfs(vector<vector<int>> &v, TreeNode* Root, int level)
{
if(!Root) return;
if(level>=v.size())
v.push_back(vector<int>());
v[level].push_back(Root->val);
dfs(v,Root->left,level+1);
dfs(v,Root->right,level+1);
}
};