题目描述
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
*/
//循环解法
class Solution {
public:
vector<vector<int> > Print(TreeNode* pRoot) {
vector<vector<int>> v;
if(pRoot == NULL)
return v;
queue<TreeNode *> qu;
TreeNode * p = NULL;
qu.push(pRoot);
vector<int> t;int count = 0;
while(!qu.empty()){
count = qu.size();//获取每一层的节点数
while(count--){
p = qu.front();
t.push_back(p->val);
if(p->left)
qu.push(p->left);
if(p->right)
qu.push(p->right);
qu.pop();
}
v.push_back(t);
t.clear();
}
return v;
}
};
//递归写法,深度优先遍历。利用栈的深度和树的高度对比
class Solution {
public:
vector<vector<int> > Print(TreeNode* pRoot) {
vector<vector<int>> v;
if(pRoot == NULL)
return v;
dfs(pRoot,1,v);
return v;
}
void dfs(TreeNode* root,int depth,vector<vector<int>> &v)
{
if(root == NULL)return ;
if(depth > v.size())
v.push_back(vector<int>());
v[depth - 1].push_back(root->val);
dfs(root->left,depth + 1, v);
dfs(root->right,depth + 1, v);
}
};