【Leetcode】 刷题家之102. Binary Tree Level Order Traversal

Medium的题开始上强度了,需要看答案才能想出解决方法了。但是看懂答案再去模仿何尝不是一种学习的方法呢

请看题

Example

思路

Medium类型的题目。看答案再想思路。

题目要求使用层次遍历,那么层次遍历需要用到queue。基于这个queue再去想其他的方法。

回到代码上,首先定义了双重vector作为答案返回,其值需在循环中更新。

首先还是熟悉的如果传入的树为空直接返回答案,这一步骤是我刷了好多题后的出来的结论嘿嘿

那么在if的后面就要更上本题的核心代码了,使用一个queue然后直接把树push进去。

开头一个while循环,条件为如果queue不为空就一直循环,进入循环后,先把queue的大小给获取然后再定义一个vector用来表示双重vector中的第二个vector。

根据queue大小来进行层次遍历,也就是熟悉的for循环。进入for循环后,首先要获取到根节点,然后删除queue容器中的根节点。这一步直接决定了层次遍历的基本。

如果获取到的根节点含有左右节点,那么更新quene容器,否则直接往我们的第二个vector中添加答案,因为这个获取的答案是没有左右节点的,是符合层次遍历的条件的。一直循环,直到容器为空结束。
最后要再结束钱push_back()到的我们的最终答案内,进行返回,提交,一气呵成!


Code

/**
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    vector<vector<int>> levelOrder(TreeNode* root) {
        vector<vector<int>> result;
        if(!root){ return result; }
        queue<TreeNode*> q;
        q.push(root);
        while(!q.empty())
        {
            int size = q.size();
            vector<int> v;
            for(size_t i = 0; i < size; i++)
            {
                TreeNode *node = q.front();
                q.pop();
                if(node->left) { q.push(node->left); }
                if(node->right) { q.push(node->right) ;}
                v.push_back(node->val);
            }
            result.push_back(v);
        }
        return result;
    }
};

Medium题还是有点难度的啊


结束。

3 个赞

太强了刷题屎佬

From #dev to 开发调优