【算法刷怪】leetcode-102.二叉树的层序遍历

非最优解,仅学习记录。

算法思路:
广度优先遍历 迭代法
!存结果怎么存?
–建立一个二维动态数组存放总的返回结果,再建立一个一位动态数组存放每次遍历的结果,每次遍历完成后将一维数组存入结果数组中即可。
!判断空可以用NULL或nullptr(c++)

class Solution {
public:
    vector<vector<int>> levelOrder(TreeNode* root) {
        vector<vector<int>> res;
        //vector<int> v;//不建议定义此处。见下。
        //根结点不为空时才有之后的遍历。
        if(root){
            queue<TreeNode*> que;//用于存放结点的队列
            que.push(root);//先存入根结点,que初始长度+1
            while(!que.empty()){
                vector<int> v;//因一维数组每次层遍历后要清空,故不建议定义为全局的。
                int size=que.size();//获取本层数长度
                for(int i=0;i<size;i++){
                    //获取该层每一个结点,将值存入一维数组(按层存)
                    TreeNode* n=que.front();
                    v.push_back(n->val);
                    //将已经用完的结点出队,露出下一个需用结点,为下次循环准备
                    que.pop();
                //将该结点的左右子树添加到队列中,添加也是从队尾添加故不影响前面的结点遍历。
                    if(n->left)que.push(n->left);
                    if(n->right)que.push(n->right);
                }
                //将每次层遍历结束结果结算到最终结果数组中
                res.push_back(v);
            }
        }
        return  res;
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值