정렬 된 연결 목록을 균형 잡힌 BST로 변환하기 위해 Java에서이 코드를보고 있었고 구현 # 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);
}
토마스, 개체가 힙에 만들어진 경우 부모가 고급 포인터를 보지 않는 이유는 무엇입니까? – Phoenix
그리고 이전 재귀 호출에서 볼 수있는 다른 객체 참조를 포함하는 래퍼의 로컬 참조를 전달하는 이유는 무엇입니까? – Phoenix
둘 다 스택 프레임의 참조입니까? 그렇다면 왜 두 번째 접근법이 일을 올바르게 보는가? 두 가지 모두 로컬 참조인데도 메모리가 다르게 액세스되는 방법에 대한 답을 설명 할 수 있습니까? – Phoenix