Leetcode Java Add One Row to Tree
업데이트:
문제
코드
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public TreeNode addOneRow(TreeNode root, int val, int depth) {
if (root != null) {
if (depth == 1) {
TreeNode treeNode = new TreeNode(val);
treeNode.left = root;
return treeNode;
} else if (depth == 2) {
TreeNode left = new TreeNode(val);
left.left = root.left;
TreeNode right = new TreeNode(val);
right.right = root.right;
root.left = left;
root.right = right;
} else {
root.left = this.addOneRow(root.left, val, depth - 1);
root.right = this.addOneRow(root.right, val, depth - 1);
}
}
return root;
}
}
결과
설명
- root의 depth번째 깊이에 val 값의 TreeNode를 아래대로 수행한 결과를 반환하는 문제이다.
- depth가 주어지면 null이 아닌 cur TreeNode를 두 개 만들어 cur의 left TreeNode와 right TreeNode에 이어준다.
- cur의 기존 left TreeNode는 새 TreeNode의 left TreeNode로 넣어준다.
- cur의 기존 right TreeNode는 새 TreeNode의 right TreeNode로 넣어준다.
- depth가 1인 경우, val 값인 TreeNode를 만들어 root를 앞에서 만든 TreeNode의 left TreeNode로 넣어준다.
-
root가 null이면 그대로 root를 반환한다.
-
depth가 1인 경우 val 값인 TreeNode를 treeNode로 정의하고, treeNode의 left TreeNode에 root를 넣어 treeNode를 반환한다.
- depth가 1인 경우 아래를 수행한다.
- val 값인 TreeNode를 left와 right 두 개를 만든다.
- left의 left TreeNode에 root의 TreeNode를, right의 right TreeNode에 root의 right TreeNode를 넣어준다.
- root의 left TreeNode에 left를, root의 right TreeNode에 right를 넣어준다.
- 그 외의 경우 아래를 수행한다.
- root의 left TreeNode에 root의 left TreeNode와 depth를 1 감소시킨 값으로 재귀 호출 수행한 결과를 넣어준다.
- root의 right TreeNode에 root의 right TreeNode와 depth를 1 감소시킨 값으로 재귀 호출 수행한 결과를 넣어준다.
- 수행이 완료되면 root를 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기