102-Binary Tree Level Order Traversal

题目

Given a binary tree, return the level order traversal of its nodes’ values. (ie, from left to right, level by level).

For example:
Given binary tree [3,9,20,null,null,15,7],

   3
   / \
  9  20
    /  \
   15   7

return its level order traversal as:

[
  [3],
  [9,20],
  [15,7]
]
分析
  1. 用队列保存未访问节点
  2. 一个变量保存当前层中未被访问的节点数目
  3. 另一个变量表示下一层的节点数目
实现
class Solution {
public:
    vector<vector<int>> levelOrder(TreeNode* root)
    {
        vector<vector<int>> res;
        if (root == NULL)
            return res;
        //remainNum 标记本层剩余的结点数目
        //childNum 标记下一层的子节点数目
        int remainNum = 1, childNum = 0;
        vector<int> tmpRes;
        //队列记录所有未被访问结点
        queue<TreeNode*> que;
        que.push(root);
        TreeNode * currNode = NULL;
        while (remainNum||childNum)
        {   
            currNode = que.front();
            tmpRes.push_back(currNode->val);
            if (currNode->left)
            {
                childNum++;
                que.push(currNode->left);
            }
            if (currNode->right)
            {
                childNum++;
                que.push(currNode->right);
            }
            que.pop();
            remainNum--;
            if (remainNum == 0)
            {
                res.push_back(tmpRes);
                tmpRes.clear();
                remainNum = childNum;
                childNum = 0;
            }
        }
        return res;
    }


};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值