广度优先遍历

题一:leetcode 102 (二叉树的层次遍历)
(https://leetcode-cn.com/problems/binary-tree-level-order-traversal/submissions/)

给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。

解法1:

class Solution {
public:
    vector<vector<int>> levelOrder(TreeNode* root) {
        vector<vector<int>> data;
        queue<TreeNode*> nodeQueue;
        nodeQueue.push(root);
        helper(data, nodeQueue);
        return data;
    }
    void helper(vector<vector<int>>& data, queue<TreeNode*> que)
    {
        queue<TreeNode*> nextQue;
        vector<int> temp;
        if(que.empty()) return;
        while(!que.empty())
        {
            TreeNode* node = que.front();
            if(node)
            {
                temp.push_back(node->val);
                nextQue.push(node->left);
                nextQue.push(node->right);
            }
            que.pop();
        }
        if(!temp.empty()) { data.push_back(temp); }
        helper(data, nextQue);   
    }
};

题二:leetcode 515 (在每个树行中找最大值)
(https://leetcode-cn.com/problems/find-largest-value-in-each-tree-row/submissions/)

class Solution {
public:
    vector<int> largestValues(TreeNode* root) {
        vector<int> data;
        queue<TreeNode*> nextQue;
        nextQue.push(root);
        helper(data, nextQue);
        return data;
    }
    void helper(vector<int>& data, queue<TreeNode*> que)
    {
        queue<TreeNode*> nextQue;
        if(que.empty()) return;

        //TreeNode* first = que.front();
        int maxVal = -1;
        bool flag = false;
        while(!que.empty())
        {
            TreeNode* node = que.front();
            if(node) 
            { 
                if(flag == false)
                {
                    maxVal = node->val;
                    flag = true;
                }
                maxVal = maxVal > node->val ? maxVal : node->val;
                nextQue.push(node->left);
                nextQue.push(node->right);
            }
            que.pop();
        }
        if(flag) data.push_back(maxVal);
        helper(data, nextQue);
    }
};

题三:面试题 04.03 (特定深度节点链表)
(https://leetcode-cn.com/problems/list-of-depth-lcci/submissions/)

class Solution {
public:
    vector<ListNode*> listOfDepth(TreeNode* tree) {
        vector<ListNode*> list;
        queue<TreeNode*> que;
        que.push(tree);
        helper(list, que);
        return list;
    }
    void helper(vector<ListNode*>& list, queue<TreeNode*> que)
    {
        queue<TreeNode*> nextQue;
        if(que.empty()) return;

        ListNode* head = nullptr;
        ListNode* pCur = nullptr;
        bool flag = false;
        while(!que.empty())
        {
            TreeNode* node = que.front();
            if(node)
            {
                nextQue.push(node->left);
                nextQue.push(node->right);
                ListNode *item = new ListNode(node->val);
                if(flag == false)
                {
                    head = item;
                    flag = true;
                    pCur = head;
                }
                else
                {
                    pCur->next = item;
                    pCur = pCur->next;
                }
            }
            que.pop();
        }
        if(head) list.push_back(head);
        helper(list, nextQue);
    }
};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容