var current=root; var parent=null; var i=current.compareData(data); while(i!=0&¤t!=null){ if(i>0){ parent=current; current=current.left; }else if(i<0){ parent=current; current=current.right; } i=current.compareData(data); } if(!current){ return; } this.count--; if(!current.right){ if(!parent){ root=current.left; }else{ i=parent.compare(current); if(i>0){ parent.left=current.left; } else if(i<0){ parent.right=current.left; } } } else if(!current.right.left){ if(!parent){ root=current.right; }else{ i=parent.compare(current); if(i>0){ parent.left=current.right; } else if(i<0){ parent.right=current.right; } } } else{ var leftmost=current.right.left; var lmParent=current.right; while(leftmost.left!=null){ lmParent=leftmost; leftmost=leftmost.left; } lmParent.left=leftmost.right; leftmost.left=current.left; leftmost.right=current.right; if(!parent){ root=leftmost; }else{ i=parent.compare(current); if(i>0){ parent.left=leftmost; } else if(i<0){ parent.right=leftmost; } } }