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

Posted HERODING23

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 1600 皇位继承顺序[多叉树 递归] HERODING的LeetCode之路相关的知识,希望对你有一定的参考价值。

在这里插入图片描述在这里插入图片描述解题思路:
仔细观察该题,其实本质上就是多叉树的深度优先遍历(前序遍历),在树中,优先级为左大于右,左中,上大于下。
如何实现多叉树呢?map是个绝佳的选择,至于死亡数组,用set比较合适(不重复而且无需在乎顺序)。整体步骤如下:

  1. 定义死亡数组,多叉树map,根;
  2. 标记国王,并标注为根;
  3. 插入孩子时,父亲节点队列加入子节点,子节点也开辟新的队列;
  4. 查询时,首先判断当前节点是否在死亡数组汇总,再递归遍历子节点。

代码如下:

class ThroneInheritance {
private:
    // 定义死亡数组,多叉树map,根
    set<string> dead;
    unordered_map<string, vector<string>> tree;
    string root;

public:
    ThroneInheritance(string kingName) {
        // 标记国王,并标注为根
        tree[kingName] = vector<string>();
        root = kingName;
    }
    
    void birth(string parentName, string childName) {
        // 父亲节点队列加入子节点
        tree[parentName].push_back(childName);
        // 子节点也开辟新的队列
        tree[childName] = vector<string>();
    }
    
    void death(string name) {
        // 死亡就加入死亡数组
        dead.insert(name);
    }
    
    void getOrder(string root, vector<string>& ans) {
        // 如果不在死亡数组,放入查询队列中
        if(!dead.count(root)) ans.push_back(root);
        // 深度优先遍历
        for(string& child : tree[root]) {
            getOrder(child, ans);
        }
    }

    vector<string> getInheritanceOrder() {
        // 调用gerOrder得到继任序列
        vector<string> ans;
        getOrder(root, ans);
        return ans;
    }
};

/**
 * 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();
 */


/*作者:heroding
链接:https://leetcode-cn.com/problems/throne-inheritance/solution/cduo-cha-shu-de-shen-du-you-xian-by-hero-ndg4/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。*/

以上是关于LeetCode 1600 皇位继承顺序[多叉树 递归] HERODING的LeetCode之路的主要内容,如果未能解决你的问题,请参考以下文章

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

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

LeetCode每日一题——1600. 皇位继承顺序

简单的JAVA多叉树问题实现

[LeetCode] 589. N-ary Tree Preorder Traversal

[转] 多叉树转换二叉树