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;
}
};