Leetcode623. 두 갈래 나무에 한 줄 추가
8831 단어 Leetcode
Leetcode623. 두 갈래 나무에 한 줄 추가
비슷한 제목: Leetcode104.두 갈래 나무의 최대 깊이 제목: 두 갈래 나무를 정하고 뿌리 노드는 1층, 깊이는 1이다.d층에 v의 노드를 추가합니다.규칙 추가: 깊이 d(정수)를 지정하고 깊이 d-1층의 모든 비공식 노드 N에 대해 N에 대한 두 개의 값이 v인 왼쪽 트리와 오른쪽 트리를 생성합니다.N의 원래 왼쪽 트리를 새 노드 v의 왼쪽 트리로 연결합니다.N의 원래 오른쪽 트리를 새 노드 v의 오른쪽 트리로 연결합니다.만약 d의 값이 1이고 깊이 d-1이 존재하지 않는다면, 새로운 루트 노드 v를 만듭니다. 원래의 전체 나무는 v의 왼쪽 트리가 됩니다.
예 1: :
:
4
/ \
2 6
/ \ /
3 1 5
v = 1
d = 2
:
4
/ \
1 1
/ \
2 6
/ \ /
3 1 5
2:
:
:
4
/
2
/ \
3 1
v = 1
d = 3
:
4
/
2
/ \
1 1
/ \
3 1
문제: 각 층의 깊이를 계산하고 교체를 사용합니다.java 코드:/**
* @param root
* @param v
* @param d
* @return
*/
public static TreeNode addOneRow(TreeNode root, int v, int d) {
if (d == 1) {
TreeNode node = new TreeNode(v);
node.left = root;
return node;
} else {
Queue<Pair<TreeNode, Integer>> queue = new LinkedList<>();
queue.add(new Pair<>(root, 1));
while (!queue.isEmpty()) {
Pair<TreeNode, Integer> pair = queue.poll();
TreeNode treeNode = pair.getKey();
Integer depth = pair.getValue();
if (depth == d - 1) {
TreeNode left = treeNode.left;
TreeNode right = treeNode.right;
treeNode.left = new TreeNode(v);
treeNode.right = new TreeNode(v);
treeNode.left.left = left;
treeNode.right.right = right;
} else {
if (treeNode.left != null) {
queue.add(new Pair<>(treeNode.left, depth + 1));
}
if (treeNode.right != null) {
queue.add(new Pair<>(treeNode.right, depth + 1));
}
}
}
return root;
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
LeetCode 문제풀이 노트 113.경로 총 II
경로 총 II
제목 요구 사항
문제풀이
두 갈래 나무와 목표와 뿌리 노드에서 잎 노드까지의 모든 경로를 찾는 것은 목표와 같은 경로입니다.
설명: 잎 노드는 하위 노드가 없는 노드를 가리킨다.
예: 다음과 같은 두 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
:
:
4
/ \
2 6
/ \ /
3 1 5
v = 1
d = 2
:
4
/ \
1 1
/ \
2 6
/ \ /
3 1 5
2:
:
:
4
/
2
/ \
3 1
v = 1
d = 3
:
4
/
2
/ \
1 1
/ \
3 1
/**
* @param root
* @param v
* @param d
* @return
*/
public static TreeNode addOneRow(TreeNode root, int v, int d) {
if (d == 1) {
TreeNode node = new TreeNode(v);
node.left = root;
return node;
} else {
Queue<Pair<TreeNode, Integer>> queue = new LinkedList<>();
queue.add(new Pair<>(root, 1));
while (!queue.isEmpty()) {
Pair<TreeNode, Integer> pair = queue.poll();
TreeNode treeNode = pair.getKey();
Integer depth = pair.getValue();
if (depth == d - 1) {
TreeNode left = treeNode.left;
TreeNode right = treeNode.right;
treeNode.left = new TreeNode(v);
treeNode.right = new TreeNode(v);
treeNode.left.left = left;
treeNode.right.right = right;
} else {
if (treeNode.left != null) {
queue.add(new Pair<>(treeNode.left, depth + 1));
}
if (treeNode.right != null) {
queue.add(new Pair<>(treeNode.right, depth + 1));
}
}
}
return root;
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
LeetCode 문제풀이 노트 113.경로 총 II경로 총 II 제목 요구 사항 문제풀이 두 갈래 나무와 목표와 뿌리 노드에서 잎 노드까지의 모든 경로를 찾는 것은 목표와 같은 경로입니다. 설명: 잎 노드는 하위 노드가 없는 노드를 가리킨다. 예: 다음과 같은 두 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.