如何删除索引值为X的指定叶节点并显示剩余叶节点?
删除指定索引的叶节点并统计剩余叶节点数量
没问题,我来一步步拆解这个问题,帮你理清操作逻辑和验证测试案例:
核心操作步骤
要完成这个任务,我们需要遵循以下几个关键步骤:
- 构建树结构:根据输入数据创建树的父子关系映射——输入的第一个数字是节点总数,后续每个数字对应对应索引节点的父节点(
-1表示该节点是根节点)。 - 定位目标节点:确认要删除的索引
X对应的节点是否为叶节点(叶节点的定义是没有任何子节点)。 - 执行删除操作:从树中移除目标节点,同时更新其父节点的子节点列表(把
X从父节点的子节点中删掉)。 - 统计剩余叶节点:遍历整个树结构,找出所有没有子节点的节点,统计它们的数量。
测试案例验证
测试用例1
- 输入:
5 -1 0 0 1 1 2 - 初始树结构解析:根节点是索引0(父节点为
-1),0的子节点是1和2;1的子节点是3和4;此时节点2、3、4没有子节点,属于叶节点。 - 操作:删除索引为2的叶节点
- 结果:移除节点2后,父节点0的子节点只剩1,而节点3、4仍无子女,所以剩余叶节点是3和4,数量为2 → 输出:
2
测试用例2
- 输入:
5 -1 0 0 1 1 1 - 初始树结构解析:根节点是0,0的子节点是1和2;1的子节点是3和4;初始叶节点为2、3、4。
- 操作:删除索引为1的节点(这里注意:虽然1不是初始叶节点,但删除它后,它的子节点3、4会因为失去父节点而被移除)
- 结果:剩余的节点中只有2没有子节点,所以叶节点数量为1 → 输出:
1
实现小贴士
如果要写代码实现这个逻辑,可以参考这些思路:
- 用数组或字典存储每个节点的子节点列表,比如
children = [[] for _ in range(n)],遍历输入的父节点数组来填充这个列表。 - 删除节点时,先找到它的父节点
parent,然后执行children[parent].remove(X)。 - 最后统计所有
len(children[i]) == 0的节点数量,就是剩余叶节点的个数。
内容的提问来源于stack exchange,提问作者Debosmit Majumder
相关产品推荐
相关产品推荐

