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]
]
//BFS
// Use queue, and vector<TreeNode*> level. Put root into queue first. Find its queue size.For each level,
//save to level and and put in left/right child into queue.
/**
* Definition of TreeNode:
* class TreeNode {
* public:
* int val;
* TreeNode *left, *right;
* TreeNode(int val) {
* this->val = val;
* this->left = this->right = NULL;
* }
* }
*/
class Solution {
public:
/*
* @param root: A Tree
* @return: Level order a list of lists of integer
*/
vector<vector<int>> levelOrder(TreeNode * root) {
// write your code here
vector<vector<int>> results;
if (root == NULL) {
return results;
}
queue<TreeNode*> q;
q.push(root);
while (!q.empty()) {
vector<int> cur;
int size = q.size();
for (int i = 0; i < size; i++) {
TreeNode* top = q.front();
q.pop();
cur.push_back(top->val);
if (top->left != NULL) {
q.push(top->left);
}
if (top->right != NULL) {
q.push(top->right);
}
}
results.push_back(cur);
}
return results;
}
};
//DFS
// Find its height, when dfs, count depth number, and use vector[number] to save each level value.
/**
* Definition of TreeNode:
* class TreeNode {
* public:
* int val;
* TreeNode *left, *right;
* TreeNode(int val) {
* this->val = val;
* this->left = this->right = NULL;
* }
* }
*/
class Solution {
public:
//DFS, Find height H, restore numbers to each level
vector<vector<int>> levelOrder(TreeNode * root) {
int height = findHight(root);
vector<vector<int>> results(height);
dfs(root, 0 , height, results);
return results;
}
void dfs(TreeNode* root, int number, int height, vector<vector<int>>&results) {
if (root == NULL) {
return;
}
results[number].push_back(root->val);
dfs(root->left, number+1, height, results);
dfs(root->right, number+1, height, results);
}
int findHight(TreeNode* root) {
if (root == NULL) {
return 0;
}
int leftHight = findHight(root->left);
int rightHight = findHight(root->right);
return max(leftHight, rightHight) + 1;
}
};