public void addToLeft(TreeNode node, Integer value) {
TreeNode left = node.left;
if (left == null) left = new TreeNode(value);
}
위 함수는 마치, 인자로 넘겨진 node의 왼쪽에 새로운 노드를 만들어주는 함수로 보인다.
그러나 위 함수를 실행시키고 나서,
인자로 넘긴 node의 왼쪽 node를 확인해 보면
여전히 null 값을 가지고 있다.
그 이유는...
Java의 객체 변수는 reference변수이기 때문이다.
TreeNode left = node.left;
함수 내에서 left 라는 변수를 만들어서, node.left가 가리키고 있는 객체를
가리키게 했다.
그리고 나서
left= new TreeNode(value)
를 했는데, 이때
left가 가리키는게 새롭게 생성된 메모리를 가리키지,
node.left가 가리키는 건 여전히 null이다.
public void addToLeft(TreeNode node, Integer value) {
node.left = new TreeNode(value);
}
위와 같이 하면 원하는데도 node의 왼쪽에 새로운 노드가 달리게 된다.
혹은 아래와 같이 해도 우리가 넘겨준 객체에 대해 left가 할당이 되게 된다.
public void addToLeft(TreeNode node, Integer value) {
TreeNode itr = node;
itr.left = new TreeNode(value);
혹은 아래와 같이 해도 우리가 넘겨준 객체에 대해 left가 할당이 되게 된다.
public void addToLeft(TreeNode node, Integer value) {
TreeNode itr = node;
itr.left = new TreeNode(value);
}
댓글 없음:
댓글 쓰기