1600. 皇位继承顺序


1600. 皇位继承顺序

题目描述

在这里插入图片描述

解题思路

1、哈希表保存父子间的关系
2、保存死亡名单
3、前序遍历多叉树获取继承顺序并排除已死亡人员

代码实现

class ThroneInheritance:

    def __init__(self, kingName: str):
        self.king = kingName
        self.deathed = set()
        self.nodes = defaultdict(list)

    def birth(self, parentName: str, childName: str) -> None:
        self.nodes[parentName].append(childName)
        # brother = self.nodes.get(parentName, None)
        # if brother:
        #     brother.append(childName)
        # else:
        #     brother = []
        # self.nodes[parentName] = brother

    def death(self, name: str) -> None:
        self.deathed.add(name)

    def getInheritanceOrder(self) -> List[str]:
        self.ans = []
        def pre_order(name: str) -> None:
            if name not in self.deathed:
                self.ans.append(name)
            if name in self.nodes:
                for child in self.nodes[name]:
                    pre_order(child)
        
        pre_order(self.king)
        return self.ans

# Your ThroneInheritance object will be instantiated and called as such:
# obj = ThroneInheritance(kingName)
# obj.birth(parentName,childName)
# obj.death(name)
# param_3 = obj.getInheritanceOrder()

参考文献

官方题解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值