private Node delete(Node n, int x)
{
Node maxfromleft = null;
if(n == null) return n;
if (x < n.data)
{
n.left = delete(n.left, x);
}
else if(x > n.data)
{
n.right = delete(n.right, x);
}
else
{
if(n.right != null && n.left != null)
{
maxfromleft = max(n.left);
delete(n.left, maxfromleft.data);
n.data = maxfromleft.data;
}
else if(n.right == null)
{
n = n.left;
}
else if(n.left == null)
{
n = n.right;
}
}
return n;
}
所以我正在研究二叉树实现,我在这里发现了非常有用的信息,特别是关于remove方法,我做了它,所以它工作(大多数情况下)。问题是当Root值被删除时,它只是将值从左侧复制到根目录,所以我不确定这一点,我希望有人可以帮助我。
以下是上面使用的最大函数:
private Node max(Node n)
{
if(n==null)return null;
if(n.right!=null) return max(n.right);
return n;
}
public Node max()
{
return max(root);
}
答案 0 :(得分:0)
尝试此修复:
maxfromleft = max(n.left);
n.left = delete(n.left, maxfromleft.data);
n.data = maxfromleft.data;