题目描述
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
之字形打印二叉树的变种,将左右逆序的判断去掉就行了
#pragma once
#include <vector>
using namespace std;
namespace layer_two_tree
{
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> > ret;
if (pRoot == nullptr)
return ret;
vector<TreeNode*> que;
que.push_back(pRoot);
while (!que.empty())
{
vector<int> layer;
int size = que.size();
for (int i = 0; i < size; i++)
{
layer.push_back(que[i]->val);
}
ret.push_back(layer);
vector<TreeNode*> tmp;
for (int i = 0; i < que.size(); i++ )
{
if (que[i]->left != nullptr)
{
tmp.push_back(que[i]->left);
}
if (que[i]->right != nullptr)
{
tmp.push_back(que[i]->right);
}
}
que.clear();
que.insert(que.begin(), tmp.begin(), tmp.end());
}
return ret;
}
};
}
二、第二种方法
递归解法,给节点加一个层号,那么在对应层里增加数据就行了,实现如下:
class Solution {
public:
vector<vector<int> > Print(TreeNode* pRoot)
{
vector<vector<int> > ret;
DeLayer(pRoot, 1, ret);
return ret;
}
void DeLayer(TreeNode* pRoot, int layer, vector<vector<int> > &list)
{
if (pRoot == nullptr) return;
if (layer > list.size())
list.push_back(vector<int>());
list[layer -1].push_back(pRoot->val);
DeLayer(pRoot->left, layer + 1, list);
DeLayer(pRoot->right, layer + 1, list);
}
}