二叉树删除方法

时间:2014-05-11 11:03:17

标签: java tree binary-tree

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);
  }

1 个答案:

答案 0 :(得分:0)

尝试此修复:

maxfromleft = max(n.left);
n.left = delete(n.left, maxfromleft.data);
n.data = maxfromleft.data;