我正在查看 Java 中的这段代码,以将排序的链表转换为平衡的 BST,我想知道为什么实现 #1 不起作用。Java 的原因是什么,当我创建一个包装器对象并传递它时它可以完美地工作,但是当我使用本地引用时它却没有?对象仍然在堆右侧创建。
实施#1
BinaryTree.Node sortedListToBST(MyList.Node w, int start, int end)
{
if (start > end) return null;
int mid = start + (end - start) / 2;
BinaryTree.Node left = sortedListToBST(w, start, mid-1);
BinaryTree.Node parent = new BinaryTree.Node(w.getVal());
w = w.getNext();
BinaryTree.Node right = sortedListToBST(w, mid+1, end);
parent.left = left;
parent.right =right;
return parent;
}
BinaryTree.Node sortedListToBST(MyList.Node head, int n) {
return sortedListToBST(head, 0, n-1);
}
实施#2
BinaryTree.Node sortedListToBSTWrapper(Wrapper w, int start, int end)
{
if (start > end) return null;
int mid = start + (end - start) / 2;
BinaryTree.Node left = sortedListToBSTWrapper(w, start, mid-1);
BinaryTree.Node parent = new BinaryTree.Node(w.node.getVal());
w.node = w.node.getNext();
BinaryTree.Node right = sortedListToBSTWrapper(w, mid+1, end);
parent.left = left;
parent.right =right;
return parent;
}
BinaryTree.Node sortedListToBSTWrapper(MyList.Node head, int n) {
Wrapper w = new Wrapper();
w.node = head;
return sortedListToBSTWrapper(w, 0, n-1);
}