我在树中组织了对象(非二进制)。每个节点都有其Children和Parent属性的集合。它已经在TreeView中呈现。我想点击叶子并以删除叶子的方式删除它,如果leaf是它唯一的子节点,它就会移到父节点上,如果父节点属性X == null,则删除它,然后再向上移动。如果没有 - 停止。 请问您能为这个问题提出解决方案吗?我认为递归在这里很有用,但我不知道如何让它正常工作。
答案 0 :(得分:1)
这应该是评论,但仍然......我不熟悉您正在使用的TreeView,但为什么不写下这样的内容:
void removeNode(Node node) {
if (node != null && node.getChildren().size() == 0) {
Node parent = node.getParent();
if (parent != null && parent.getChildren().size() == 1) {
parent.getChilder().clear();
removeNode(parent);
}
}
}
只要您点击一个叶子节点(不确定它在程序中的外观),就可以调用此方法。
答案 1 :(得分:0)
看来我找到了解决方案。我以为我之前用递归打破了一些东西,但问题结果却很小。
这是我的解决方案:
internal static void RemoveFromTree(ConfigurationItem item)
{
NamedObject parent = item.Parent;
if (parent is ConfigurationItem && parent.Children.Count == 1 && (parent as ConfigurationItem).ConfigId == null)
{
RemoveFromTree(parent as ConfigurationItem);
}
parent.Children.Remove(item);
item.Parent = null;
}
NamedObject是ConfigurationItem和ConfigurationRoot的共同祖先。