如何从叶子中删除树中的路径?

时间:2014-08-13 10:22:34

标签: recursion tree graph-algorithm tree-traversal recurrence

我在树中组织了对象(非二进制)。每个节点都有其Children和Parent属性的集合。它已经在TreeView中呈现。我想点击叶子并以删除叶子的方式删除它,如果leaf是它唯一的子节点,它就会移到父节点上,如果父节点属性X == null,则删除它,然后再向上移动。如果没有 - 停止。 请问您能为这个问题提出解决方案吗?我认为递归在这里很有用,但我不知道如何让它正常工作。

2 个答案:

答案 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的共同祖先。