解题思路
- 层次遍历树,不难,有一些细节需要仔细的考虑。
- c++如果构造函数中的所有参数都有默认值,那么不需要再添加无参构造函数
- 层次遍历的话设置一个队列依次压入队列不断的扩展节点就好了,值得注意的是不要把NULL压入队列。
代码
/**
* 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:
struct Node{
TreeNode*node;
int tier;
// Node(){}
Node(TreeNode*Node=NULL,int tier_=-1){
node=Node;
tier=tier_;
}
};
typedef struct Node Node;
vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>>res;
vector<int> tier;
if(root==NULL){
return res;
}
queue<Node>q;
q.push(Node(root,0));
Node top;
int prev=-1;
while(!q.empty()){
top=q.front();
q.pop();
if(top.tier==prev+1){
tier.push_back(top.node->val);
}
else{
res.push_back(tier);
tier.clear();
prev+=1;
tier.push_back(top.node->val);
}
if(top.node->left){
q.push(Node(top.node->left,top.tier+1));
}
if(top.node->right){
q.push(Node(top.node->right,top.tier+1));
}
}
res.push_back(tier);
return res;
}
};