面试题 04.03. List of Depth LCCI

Problem

Given a binary tree, design an algorithm which creates a linked list of all the nodes at each depth (e.g., if you have a tree with depth D, you’ll have D linked lists). Return a array containing all the linked lists.

Example

在这里插入图片描述

Solution

换了形式的树的层次遍历

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    vector<ListNode*> listOfDepth(TreeNode* tree) {

        vector<ListNode*> ret;
        if(!tree)
            return ret;

        queue<TreeNode *> my_queue;
        my_queue.push(tree);
        
        ListNode *dummy = new ListNode(0);
        ListNode *curListNode = dummy;
        TreeNode *levelEnd = tree;
        
        while(!my_queue.empty())
        {
            TreeNode *curTreeNode = my_queue.front();
            my_queue.pop();

            curListNode->next = new ListNode(curTreeNode->val);
            curListNode = curListNode->next;

            if(curTreeNode->left)
                my_queue.push(curTreeNode->left);
            if(curTreeNode->right)
                my_queue.push(curTreeNode->right);

            if(curTreeNode == levelEnd)
            {
                ret.push_back(dummy->next);
                curListNode = dummy;
                levelEnd = my_queue.back();
            }
        }

        return ret;

    }
};
发布了496 篇原创文章 · 获赞 215 · 访问量 53万+

猜你喜欢

转载自blog.csdn.net/sjt091110317/article/details/104703387
今日推荐