[M设计] lc1600. 皇位继承顺序(dfs+哈希表建多叉树+设计+阅读理解)

Posted Ypuyu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[M设计] lc1600. 皇位继承顺序(dfs+哈希表建多叉树+设计+阅读理解)相关的知识,希望对你有一定的参考价值。

1. 题目来源

链接:1600. 皇位继承顺序

2. 题目解析

阅读理解题目,看了样例解释一下就懂了。

其实就是个多叉树,然后返回它的前序遍历。其中有些节点死了**,打个标记跳过他就行了。**

这里所有参数名字都不同,可以使用 unordered_map<string, vector<string>> 作为建树,string 作为父节点,vector<string> 存储它下面的所有子节点就行了。且在大量出生情况下,需要加节点进树中

有节点 死了,不用真的从树里删除,不用调整树的结构,只需要针对这个节点打个标记,前序遍历的时候跳过它就行了。


时间复杂度: O ( n ) O(n) O(n)

空间复杂度: O ( n ) O(n) O(n)


class ThroneInheritance {
public:
    unordered_set<string> dead;
    unordered_map<string, vector<string>> family;
    string root;

    ThroneInheritance(string kingName) {
        root = kingName;
    }
    
    void birth(string parentName, string childName) {
        family[parentName].push_back(childName);
    }
    
    void death(string name) {
        dead.insert(name);
    }
    
    void dfs(vector<string>& res, string root) {
        if (!dead.count(root)) 
            res.push_back(root);
        
        for (auto s : family[root]) 
            dfs(res, s);
    }
    vector<string> getInheritanceOrder() {
        vector<string> res;
        dfs(res, root);

        return res;
    }
};

/**
 * Your ThroneInheritance object will be instantiated and called as such:
 * ThroneInheritance* obj = new ThroneInheritance(kingName);
 * obj->birth(parentName,childName);
 * obj->death(name);
 * vector<string> param_3 = obj->getInheritanceOrder();
 */

以上是关于[M设计] lc1600. 皇位继承顺序(dfs+哈希表建多叉树+设计+阅读理解)的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 1600 皇位继承顺序[多叉树 递归] HERODING的LeetCode之路

LeetCode 483. 最小好进制(数学) / 1239. 串联字符串的最大长度 / 1600. 皇位继承顺序(多叉树) / 401. 二进制手表

2021/6/20 刷题笔记皇位继承顺序与多叉树前序遍历,以及python defaultdict

[Mdfs] lc剑指 Offer 38. 字符串的排列(全排列+枚举顺序+组合类型枚举+知识理解+模板题)

[M背包] lc494. 目标和(暴力dfs+01背包)

[M枚举] lc5825. 最大兼容性评分和(暴力dfs+周赛251_3)