C++详解Leetcode:102. Binary Tree Level Order Traversal

来源:互联网 发布:漫画封面设计软件 编辑:程序博客网 时间:2024/06/08 15:47

原题

这里写图片描述

思想

这一题主要考查二叉树的层次遍历,最常用的方法就是用队列去做,但是需要将二叉树的节点值存到一个二维数组中去,然后返回,这需要在队列存储时候做一些操作,通过NULL来标记二叉树的层次

代码和详解

struct TreeNode {    int val;    struct TreeNode *left;    struct TreeNode *right;};class Solution {public:    vector<vector<int>> levelOrder(TreeNode* root) {        //分配一个二维向量        vector<vector<int>> result;        //用队列来存储二叉树结点值        queue<TreeNode *> q;        //如果根节点为空,则返回        if (!root)        {            return result;        }        //将根节点先放入队列中        q.push(root);        //再将NULL放入队列中,NULL是为了标记那一层的作用        q.push(NULL);        //cur是为了存储每一层的节点值        vector<int> cur;        //循环进行二叉树层次遍历,直到队列为空        while (!q.empty())        {            //去除队列的第一个值            TreeNode* t = q.front();            //出队列            q.pop();            //如果t==NULL则证明当前层的遍历已经结束,需要将这一层存在cur中的值放到result中            if (t == NULL)            {                result.push_back(cur);                //将cur大小重新置为0                cur.resize(0);                //如果队列不为空,证明还没有遍历结束,继续讲NULL入队列作为标记                if (q.size() > 0)                {                    q.push(NULL);                }            }            else            {                //将当前的节点值存到cur中                cur.push_back(t->val);                //如果左孩子不为空,则入队列                if (t->left)                {                    q.push(t->left);                }                //如果右孩子不为空,则入队列                if (t->right)                {                    q.push(t->right);                }            }        }        //返回结果        return result;    }};
原创粉丝点击