[規格/BFS]1068号ツリー(JAVA)
14795 ワード
質問する
に答える
これは基本的なBFS問題です.Stackとboolean配列を用いて解いた.時間複雑度は スタックでは、pushおよびpopによってすべてのサブノードが削除されます. によって除去されたノードが で削除されていないノードのうち、サブノードがない場合は コード#コード#
に答える
これは基本的なBFS問題です.Stackとboolean配列を用いて解いた.時間複雑度は
O(N^2)
であった.removeTargetNode()
removed
に表示される.countLeafNode()
count++
を選択します.import java.io.*;
import java.util.Stack;
public class Main {
private static final int ROOT = -1;
private static int n;
private static int[] parent;
private static boolean[] removed;
private static int target;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
parseInput(br);
removeTargetNode();
bw.append(String.valueOf(countLeafNode()));
br.close();
bw.close();
}
private static void parseInput(BufferedReader br) throws IOException {
n = Integer.parseInt(br.readLine());
parent = new int[n];
removed = new boolean[n];
String[] line = br.readLine().split(" ");
for (int i = 0; i < n; i++) parent[i] = Integer.parseInt(line[i]);
target = Integer.parseInt(br.readLine());
}
private static void removeTargetNode() {
Stack<Integer> stack = new Stack<>();
stack.push(target);
while (!stack.isEmpty()) {
int current = stack.pop();
removed[current] = true;
for (int i = 0; i < n; i++)
if (parent[i] == current)
stack.push(i);
}
}
private static int countLeafNode() {
int count = 0;
for (int i = 0; i < n; i++)
if (!removed[i] && isLeaf(i)) count++;
return count;
}
private static boolean isLeaf(int current) {
for (int i = 0; i < n; i++)
if (!removed[i] && parent[i] == current)
return false;
return true;
}
}
Reference
この問題について([規格/BFS]1068号ツリー(JAVA)), 我々は、より多くの情報をここで見つけました https://velog.io/@jwkim/bfs-1068テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol