参考链接
- https://leetcode-cn.com/problems/list-of-depth-lcci/
题目描述
给定一棵二叉树,设计一个算法,创建含有某一深度上所有节点的链表(比如,若一棵树的深度为 D,则会创建出 D 个链表)。返回一个包含所有深度的链表的数组。
解题思路
可以先前序遍历整棵树,记录每个深度对应的值构成的数组。然后分别针对不同深度的数组构建链表。
代码
class Solution {
public:
unordered_map<int, vector<int>> mp; // depth -> vals;
vector<ListNode*> listOfDepth(TreeNode* tree) {
traverse(tree, 0);
vector<ListNode*> answer(mp.size());
for (int i = 0; i < mp.size(); i ++)
{
answer[i] = new ListNode(mp[i][0]);
ListNode* p = answer[i];
for (int j = 1; j < mp[i].size(); j ++)
{
p->next = new ListNode(mp[i][j]);
p = p->next;
}
}
return answer;
}
void traverse(TreeNode* tree, int depth)
{
if (tree == NULL)
{
return;
}
mp[depth].push_back(tree->val);
traverse(tree->left, depth + 1);
traverse(tree->right, depth + 1);
}
};