Leetcode Java Populating Next Right Pointers in Each Node II
업데이트:
문제
코드
/*
// Definition for a Node.
class Node {
public int val;
public Node left;
public Node right;
public Node next;
public Node() {}
public Node(int _val) {
val = _val;
}
public Node(int _val, Node _left, Node _right, Node _next) {
val = _val;
left = _left;
right = _right;
next = _next;
}
};
*/
class Solution {
public Node connect(Node root) {
this.recursive(root, null);
return root;
}
private void recursive(Node curr, Node pre) {
if (curr == null) {
return;
}
if (curr.left != null) {
curr.left.next = curr.right;
}
while (curr.next == null && pre != null && pre.next != null) {
pre = pre.next;
curr.next = (pre.left != null) ? pre.left : pre.right;
}
this.recursive(curr.right, curr);
this.recursive(curr.left, curr);
}
}
결과
설명
- 지난번 Populating Next Right Pointers in Each Node 문제와 유사하게, 주어진 Node인 root를 이용하여 각 node를 이어주는 문제이다.
- 단, 연결하는 중간에 빠진 노드가 존재하므로 해당 노드를 건너 뛰고 연결하여야 한다.
- 재귀 호출을 이용하여 주어진 Node인 root의 next가 null인 경우, 동일 Level 내에서 다음에 존재하는 Node를 넣어 이어준다.
- curr이 null인 경우 해당 노드가 존재하지 않으므로, 그만 수행한다.
- curr의 left TreeNode가 null이 아닌 경우 curr TreeNode의 left와 right 자식 노드가 모두 존재한다는 의미이므로, curr.left의 next TreeNode에 curr의 right TreeNode를 넣어준다.
- curr의 next TreeNode가 null이고, pre TreeNode가 null이 아니고, pre의 right TreeNode가 null이 아닌 경우 계속 반복문을 통해서 아래를 수행한다.
- pre TreeNode에 pre의 next TreeNode를 넣어준다.
- curr의 next TreeNode에 pre의 left가 null이 아니면 pre의 left TreeNode를, 아니면 pre의 right TreeNode를 넣어준다.
- curr의 right TreeNode와 curr을 이용하여 재귀 호출을 수행한다.
- curr의 left TreeNode와 curr을 이용하여 재귀 호출을 수행한다.
- 재귀 호출이 완료되면 엮어진 Node인 root를 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기