Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 二叉树递归removeLeftmost()方法是如何工作的?_Java_Tree_Binary Tree_Binary Search Tree - Fatal编程技术网

Java 二叉树递归removeLeftmost()方法是如何工作的?

Java 二叉树递归removeLeftmost()方法是如何工作的?,java,tree,binary-tree,binary-search-tree,Java,Tree,Binary Tree,Binary Search Tree,该方法的规范声称,该方法从根开始,将删除最左边的节点并修复树结构。它还表示,如果最左边的节点没有左边的子节点,则将右边的子节点(可能是null)作为左边的子节点附加到最左边节点的父节点(我看不出代码中会发生这种情况)。代码如下: public BTNode removeLeftmost() { if (left == null) return right; left = left.removeLeftmost(); return this; } 我只是

该方法的规范声称,该方法从根开始,将删除最左边的节点并修复树结构。它还表示,如果最左边的节点没有左边的子节点,则将右边的子节点(可能是
null
)作为左边的子节点附加到最左边节点的父节点(我看不出代码中会发生这种情况)。代码如下:

public BTNode removeLeftmost()
{
    if (left == null)
        return right;

    left = left.removeLeftmost();
    return this;
}

我只是不知道它是如何返回整个树的,并且返回了最左边的节点。主要是第一部分让我感到困惑,它说如果
left==null
返回右子级。如果我深入到树中(由于递归调用),返回right不会切断很多树吗?

我假设这是一个二元搜索树,因为否则您不需要修复结构,对吗

它沿着树移动,直到左边没有更多的树枝,也就是说,只在左边,你已经到达了一片叶子

如果(左!=null){
left=left.removeLeftmost();
}


此时,它将子级右侧的分支移植到父级左侧树所在的位置(通过
left=left.removeeftmost();
),然后将以前位于同一位置的分支返回到树的根。

下面是它处理的情况:

          9
         / \ 
        8   12
       / \
      5   20
       \ 
        6
         \
          7
当我们到达
5
时,它是最左边的节点(
left==null
)。我们需要移除它。因此
5
(即
6
)的右侧返回给调用者(
return right;
),调用者将
6
作为
8
的新左树(
left=left.removeeftmost()


然后将
8
返回给调用者(
返回此
),并指定为
9
的左节点(
left=left.removeeftmost()
)。但是
8
已经是
9
的左子级,所以这不会改变任何事情。

当我认为该方法返回整个更新的二叉树时,我错了吗?或者这个方法是为了补充其他方法(如果它只返回树的一部分)?@user3614030:它返回整个树(或者相当于新的根节点)。这一点很重要,因为如果根节点是最左边的节点,则根节点本身可能会更改。也许我在跟踪递归时遇到了问题。当返回一个对象是递归问题时,我该怎么做?
          9
         / \
        8   12
       / \
      6   20
       \ 
        7