leetcode 每日一题 102. Binary Tree Level Order Traversal

一道BFS的题目,也就是层次遍历并输出。由于用的是vector套vector的结构,需要预先定义好,可以用push_back直接存进去


相当于又默写了一遍,还有很多地方不完善,详见注释:


class Solution {
public:
    vector<vector<int>> levelOrder(TreeNode* root) {
        vector<vector<int>> res;  //一个存储返回值结果
        vector<int> level;  //用于存储每一层的节点的值
        
        if(root==NULL) return res;
        
        queue<TreeNode*> q;  //用于广度遍历时存储节点   记住类型是TreeNode
        
        TreeNode* node;
        int currlev=1;
        int nextlev=0;
        
        q.push(root);
        while(!q.empty()){
            node=q.front();   //这句话少了
            q.pop();
            currlev--;
            level.push_back(node->val);
            
            if(node->left){
                q.push(node->left);
                nextlev++;
            }
            if(node->right){
                q.push(node->right);
                nextlev++;
            }
            if(currlev==0){
                res.push_back(level);
                //nextlev--;
                currlev=nextlev;
                nextlev=0;  //直接置为0 开始下一层
                level.clear();
            }
        }
        return res;
    }
};

还有一个比较好的递归的算法,原文地址如下:

https://leetcode.com/discuss/81916/clean-recursive-c-solution


class Solution {
private: 
vector<vector<int>> abc;
public:
void helper(TreeNode* root, int level) {
    if(abc.size() < level+1) abc.push_back(vector<int>(1,root->val));
    else abc[level].push_back(root->val);
    if(root->left) helper(root->left,level+1);
    if(root->right) helper(root->right,level+1);
}
vector<vector<int>> levelOrder(TreeNode* root) {
    if(root) helper(root,0);
    return abc;   
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值