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

Recursion 如何删除树中从叶子开始的路径?,recursion,tree,graph-algorithm,tree-traversal,recurrence,Recursion,Tree,Graph Algorithm,Tree Traversal,Recurrence,我将对象组织在一棵树中(不是二叉树)。每个节点都有其子节点和父属性的集合。这一切都已经在树视图中呈现了。我想点击叶子并删除它,这样叶子就被删除了,如果叶子是它的唯一的子元素,如果父元素的属性X==null,那么它就会被删除,然后再次被删除。如果没有-停止。 你能为这个问题提出一个解决方案吗?我认为递归在这里可能很有用,但我不知道如何让它正常工作。这应该是一个注释,但仍然。。。我不熟悉您正在使用的TreeView,但为什么不编写如下内容: void removeNode(Node node

我将对象组织在一棵树中(不是二叉树)。每个节点都有其子节点和父属性的集合。这一切都已经在树视图中呈现了。我想点击叶子并删除它,这样叶子就被删除了,如果叶子是它的唯一的子元素,如果父元素的属性X==null,那么它就会被删除,然后再次被删除。如果没有-停止。
你能为这个问题提出一个解决方案吗?我认为递归在这里可能很有用,但我不知道如何让它正常工作。

这应该是一个注释,但仍然。。。我不熟悉您正在使用的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);
                    }
            }
    }

每当“单击”(不确定它在程序中的外观)叶节点时,都会调用此方法。

看来我找到了解决方案。我以前以为我打破了递归的一些东西,但是问题变得非常小

以下是我的解决方案:

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

有趣的是,请共享您的代码