Phó GOAT
Senior Member
Java:
/**
* 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 static int amountOfTime(TreeNode root, int start) {
int time = 0;
Set<Integer> visited = new HashSet<>();
Map<Integer, Set<Integer>> map = new HashMap<>();
dfs(root, 0, map);
Queue<Integer> queue = new ArrayDeque<>();
queue.add(start);
visited.add(start);
while (!queue.isEmpty()) {
int size = queue.size();
while (size > 0) {
int curr = queue.poll();
for (int n : map.get(curr)) {
if (!visited.contains(n)) {
visited.add(n);
queue.add(n);
}
}
size--;
}
time++;
}
return time - 1;
}
public static void dfs(TreeNode root, int val, Map<Integer, Set<Integer>> map) {
if (root == null) {
return;
}
if (!map.containsKey(root.val)) {
map.put(root.val, new HashSet<>());
}
if (val != 0) {
map.get(root.val).add(val);
}
if (root.left != null) {
map.get(root.val).add(root.left.val);
}
if (root.right != null) {
map.get(root.val).add(root.right.val);
}
dfs(root.left, root.val, map);
dfs(root.right, root.val, map);
}
}
Java:
class Solution {
private int ans;
public int amountOfTime(TreeNode root, int start) {
dfs(root, start);
return ans;
}
public int dfs(TreeNode root, int start) {
if (root == null) return 0;
int leftDepth = dfs(root.left, start);
int rightDepth = dfs(root.right, start);
if (root.val == start) {
ans = Math.max(leftDepth, rightDepth);
return -1;
} else if (leftDepth >= 0 && rightDepth >= 0) {
return Math.max(leftDepth, rightDepth) + 1;
} else {
ans = Math.max(ans, Math.abs(leftDepth - rightDepth));
return Math.min(leftDepth, rightDepth) - 1;
}
}
}

, mà hơi nhiều if else 
.





