【问题标题】:Conditionally counting nodes in a tree traversal - recursively有条件地计算树遍历中的节点 - 递归
【发布时间】:2020-08-15 20:48:43
【问题描述】:

处理大学作业,需要比较树中的节点并计算满足特定条件的节点。我可以看到如何迭代地执行此操作,使用堆栈遍历树等,但我确信讲师正在寻找递归解决方案,而我正在努力解决这个特定的实现。

我目前(有缺陷的)实现是:

public int traverseIncrement(User user, User reference) {

    if(user == null)
        return 0;

    int count = 1;

    if (user.getLeft() != null) {
        if(user.getLevel() > reference.getLevel()) {
            count += traverseIncrement(user.getLeft(), reference);
        }
    }

    if (user.getRight() != null) {
        if(user.getLevel() > reference.getLevel()) {
            count += traverseIncrement(user.getRight(), reference);
        }
    }

    return count;       
}

有两个明显的问题,第一个是第一个节点永远不会被评估,第二个是我总是比所需的输出高一个。任何朝着正确方向轻推都会有所帮助!

【问题讨论】:

    标签: java recursion binary-search-tree


    【解决方案1】:

    我认为这两个问题是相关的。与其假设count 为1,然后根据条件是否满足进行递归,不如根据条件设置count,然后进行递归。换句话说,将给定节点的评估留给处理该节点的调用。

    此外,您可以取消对左侧或右侧的检查,即 null,因为您的函数已经在输入时进行检查。

    public int traverseIncrement(User user, User reference) {
        if(user == null)
            return 0;
    
        int count = (user.GetLevel() > reference.getLevel()) ? 1 : 0;
    
        count += traverseIncrement(user.getLeft(), reference);
        count += traverseIncrement(user.getRight(), reference);
    
        return count;
    }
    

    【讨论】:

    • 啊,是的,我和你在一起。那很完美。谢谢你的帮助:)
    猜你喜欢
    • 1970-01-01
    • 2012-12-12
    • 1970-01-01
    • 2020-11-20
    • 2020-02-21
    • 1970-01-01
    • 2023-03-14
    • 2018-07-12
    • 2014-03-11
    相关资源
    最近更新 更多