C/C++教程

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);
    }
};
这篇关于leetcode之特定深度节点链表(C++)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!