如何删除二叉搜索树中的最大数字?

时间:2018-06-21 20:16:09

标签: java binary-search-tree

我知道如何构建二叉树,但是我需要一个方法
public void delMax(),可删除最多的树。因此,这意味着我必须删除右侧最后位置的值。

递归方法很有意义,但是我如何才能正确地将右节点设置到下一个位置来检查是否next is != null呢?

public class Node
{
    int data;
    Node left;
    Node right;
}

public class BinarySearchTree {
    private Node root = null;
}


    public void delMax()
{
root = delMaxR(root);
}
private static Node delMaxR(Node p)
{
if (p == null)
return null;
if (p.right == null)
p
= p.left;
else
p.right = delMaxR(p.right);
return p;
}
}

1 个答案:

答案 0 :(得分:0)

我们首先检查一下:二进制搜索树的结构是什么。

这是一棵树,其中每个节点的左子节点小于节点本身。 因此,知道这一点后,每个节点的右子节点必须更大。

因此,通过访问您遍历的节点的每个正确的子节点来删除最大的条目非常容易。如果再没有合适的孩子,则必须检查是否还有一个孩子。如果有左子节点,则需要将其重新附加到要删除的节点的父节点的右子节点。

这里有一些伪代码向您显示方向:

prevNode = root;
traverser = root;
while(traverser.right != null){
  prevNode = traverser;
  traverser = traverser.right;
}

if(traverser.left != null) {
  prevNode.right = traverser.left;
}else {
  prevNode.right = null;
}