【问题标题】:Simple Binary Tree question about a custom insert function关于自定义插入函数的简单二叉树问题
【发布时间】:2022-01-07 13:26:27
【问题描述】:

我正在开发一个构建二叉树的程序,它可以工作,但我对某事感到好奇:

当我不将insertNode 的递归分配给node.leftChildnode.rightChild 时,树只添加了根,没有其他值,而当我将insertNode 分配给node.rightChild ,它将所需的数组完全插入到二叉树中。我的意思是,当我用 insertNode(node.leftChild, key);insertNode(node.rightChild, key); 替换代码的第 33 行和第 35 行时,它只会将根(第一个数组项)插入到树中,而不是别的。这是为什么呢?

我附上了带有嵌入式链接的代码截图

【问题讨论】:

  • 不要发布你的代码截图。将代码作为问题的一部分发布。

标签: java data-structures binary-tree


【解决方案1】:

当我没有将insertNode 的递归分配给node.leftChildnode.rightChild 时,树只添加了根,没有其他值

这是意料之中的,因为它是唯一将值分配给leftChildrightChild 属性的地方。因此,如果它不在那里发生,它就不会发生。因此,根不可能有左或右孩子。

当我将insertNode 分配给node.rightChild 时,它会将所需的数组完全插入到二叉树中。

是的,这个算法背后的想法是,当找到插入点时,递归停止(基本情况)。在那一刻(单独)创建了新节点。但是这个节点仍然没有连接到树的其余部分。这里的想法是递归函数的 caller 负责将该新节点附加到应该是其父节点的节点。因此,当创建 ne 节点时,它会返回,而无需任何进一步的操作。 调用者然后将该新节点分配给node.rightChildnode.leftChild。在那一刻,树就准备好了。

不过,该进程将继续退出递归树,每次都将node 返回给调用者。在所有这些剩余的情况下,这意味着调用者会将返回的节点分配给 那里已经有相同节点引用的属性。但这当然不是问题。

仅当调用者使用null 引用作为第一个参数进行调用时,此分配才真正相关。在这种情况下,它将返回一个非空引用,它必须正确分配该引用才能将该新节点添加到树中。另一方面,如果使用非空节点引用进行递归调用,则返回值将是 that 引用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-08
    • 1970-01-01
    • 1970-01-01
    • 2019-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多