从原始树中删除深度为k以下的所有子树?

时间:2017-09-27 03:22:43

标签: java recursion binary-tree binary-search-tree

我完全坚持这个问题,不知道从哪里开始。它失败了我给它的每一个测试,但我不知道如何解决它。说明是: 从原始树中删除深度k以下的所有子树

相关信息: - 不要更改Node类。 - 请勿更改任何功能的第一行:名称,参数,类型。 您可以添加新功能,但不要删除任何内容 - 函数必须是递归的 - 没有循环 - 每个函数必须只有一个递归辅助函数,您可以添加它 - 每个函数必须是独立的 - 不要调用助手以外的任何函数 - 没有字段(在函数外声明的变量)

如果您认为我遗漏了任何信息/代码,请告知我们。

相关代码:

private Node root;
private static class Node {
    public final int key;
    public Node left, right;
    public Node(int key) { this.key = key; }
}



public void removeBelowDepth(int k) {
    removeBelowDepthHelper(root, 0, k);
    }
private void removeBelowDepthHelper(Node node, int currentDepth, int k) {
    if (node == null) return;
    if (currentDepth == k) {
        node = null;
        return;
    }
    removeBelowDepthHelper(node.left, currentDepth + 1, k);
    removeBelowDepthHelper(node.right, currentDepth + 1, k);
    }

1 个答案:

答案 0 :(得分:2)

我接受了AJ的建议,只是改变了空调,它完美无缺!非常感谢你们!

public void removeBelowDepth(int k) {
        removeBelowDepthHelper(root, 0, k);
        }
        private void removeBelowDepthHelper(Node node, int currentDepth, int k) {
        if (node == null) return;
        if (currentDepth == k) {
            node.left = null;
            node.right = null;
            return;
        }
        removeBelowDepthHelper(node.left, currentDepth + 1, k);
        removeBelowDepthHelper(node.right, currentDepth + 1, k);
        }