java吧 关注:1,248,412贴子:12,727,999
  • 1回复贴,共1

求帮助啊,距离deadline只差2小时了,代码还是有个奇怪的问题

只看楼主收藏回复

一个二叉树问题,要求删除二叉树内的节点,当元素在500,000个以下或者1,500,000个以上时,正常输出:
remove: 63(耗时)
search: Pass
false
但是在500,000-1,000,000时输出为:
remove: 65
search: Fail
Pass
false
实在搞不懂为啥,代码如下:
//main part
public class Main {
public static void main(String[] args) {
BinaryTree<Integer> tree = new BinarySearchTree<Integer>();
Random rand;
int num = args.length == 1 ? Integer.parseInt(args[0]) : 1000000;
long start, stop;
tree.remove(num+1);
rand = new Random(1);
System.out.print("remove: ");
start = System.currentTimeMillis();
for (int i = 0; i < num; ++i) {
tree.remove(rand.nextInt(num));
}
stop = System.currentTimeMillis();
System.out.println(stop - start);
rand = new Random(1);
System.out.print("search: ");
for (int i = 0; i < num; ++i) {
if (tree.search(rand.nextInt(num))) {
System.out.println("Fail");
break;
}
}
System.out.println("Pass");
System.out.println(tree.root == null);
}
}
delete part//
private Node<E> remove (Node<E> curr,Node<E> node) {
if (curr == null) {
return root;
}
int result = node.data.compareTo(curr.data);
if (result > 0) {
curr.right = remove(curr.right, node);
} else if (result < 0) {
curr.left = remove(curr.left, node);
} else if (curr.left != null && curr.right != null) {
Node<E> iop = findIOP(curr);
curr.data = iop.data;
node.data = iop.data;
curr.left = remove(curr.left, node);
}
else
curr = (curr.left != null) ? curr.left : curr.right;
return node;
}
private Node<E> findIOP(Node<E> curr) {
for (curr = curr.left; curr.right != null; curr = curr.right);
return curr;
}


1楼2016-12-14 11:03回复
    谁帮解决了发红包,说话算话


    4楼2016-12-14 12:23
    回复