https://leetcode.com/problems/binary-tree-level-order-traversal/discuss/
1、BFS解法:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
struct DTreeNode {
TreeNode *node;
int dep;
DTreeNode(int d, TreeNode *r): dep(d), node(r) {}
};
class Solution {
public:
vector<vector<int> > levelOrder(TreeNode* root) {
vector < vector<int> > ret;
if (root == NULL) return ret;
vector < int > dep0;
queue < DTreeNode* > q;
q.push( new DTreeNode(0, root) );
while (! q.empty()) {
DTreeNode * tp = q.front();
q.pop();
int dep = tp->dep;
if (dep >= ret.size()) {
ret.push_back( vector<int>{} );
}
ret[dep].push_back( tp->node->val );
if (tp->node->left) {
q.push( new DTreeNode(dep+1, tp->node->left) );
}
if (tp->node->right) {
q.push( new DTreeNode(dep+1, tp->node->right) );
}
}
return ret;
}
};
2、先序遍历
这个明显更快,应该是因为没有new变量等过程吧
/**
* 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:
void dfs(vector< vector<int> > &ans, int dep, TreeNode *root ) {
if (root == NULL) return;
if (dep == ans.size()) {
ans.push_back( vector<int>{} );
}
ans[dep].push_back(root->val);
dfs(ans, dep+1, root->left);
dfs(ans, dep+1, root->right);
}
vector<vector<int>> levelOrder(TreeNode* root) {
vector< vector<int> > ans;
dfs( ans, 0, root );
return ans;
}
};