编程语言
首页 > 编程语言> > leetcode之特定深度节点链表(C++)

leetcode之特定深度节点链表(C++)

作者:互联网

参考链接

  1. 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);
    }
};

标签:traverse,tree,C++,链表,depth,mp,answer,leetcode
来源: https://blog.csdn.net/beilizhang/article/details/116375256