Java BinarySearchTree 和变量中的递归

标签 java recursion

我在理解以下内容时遇到问题:

public int sort(char[] arr, int index)
{
    if(!isEmpty())
    {
        index = leftChild.sort(arr,index);
        arr[index++] = getContent().getToken();
        index = rightChild.sort(arr,index);

    }
    return index;
}

为什么这个有效,但这个不行:

public void sort(char[] arr, int index)
{
    if(!isEmpty())
    {
        leftChild.sort(arr,index);
        arr[index++] = getContent().getToken();
        rightChild.sort(arr,index);

    }
}

我也不明白这一点:index = leftChild.sort(arr,index);这是做什么的?你们能给我举个例子吗? 感谢您的帮助,

基马里

还有一个问题,我有一种方法可以打印从二叉树的根到叶子的最长路径:

public int height()
{
if ( !isEmpty() )
{
    int leftHeight = leftChild.height();
    int rightHeight = rightChild.height();
    if ( leftHeight > rightHeight )
    {
        return leftHeight + 1;
    } else {
        return rightHeight + 1;
    }
} else {
    return 0;
}

}

但是如果没有人有值,如何做到 leftHeight > rightHeight 呢?它们都是零或者什么,那么他如何比较呢?谢谢!

最佳答案

您的方法执行二叉搜索树的中序遍历。

第一个片段首先调用leftChild.sort(arr,index),它将左子树分配给输入数组。它返回要分配的下一个索引。

然后将当前节点的getContent().getToken()分配给arr[index]

然后调用 rightChild.sort(arr,index) 将右子树分配给输入数组,并返回要分配的下一个 index

如果您忽略递归调用返回的index(正如您在第二个代码片段中所做的那样),arr[index++] = getContent().getToken();将始终为数组的 0 索引分配一个值(假设初始调用为 (sort(arr,0)))。

您必须将返回的索引分配给本地 index 变量,以便将 getContent().getToken() 分配给正确的 index数组的。

关于Java BinarySearchTree 和变量中的递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48730945/

相关文章:

Java 枚举和其他类文件

java - 未显示内部类 Intellij IDEA 错误

javascript - 在javascript中从其他对象递归创建嵌套对象

java - 递归洪水填充 - 检查边界

python - 仅比较这两个列表的变量值

recursion - 在函数定义中引用函数名称

algorithm - 编写一个程序来计算递归调用的次数

java - 无法关闭在 Spring Tool Suite 中创建的基于 java 的 Web 服务

java - 如果将 Spring 5.X 的 DefaultCookieSerializer 与 Tomcat 8 一起使用,如何防止创建 JSESSIONID

java - 使用 apacheDS 进行单元测试