Skip to content

Commit cfb3d5d

Browse files
committed
补充dfs序做法
1 parent 824d1ba commit cfb3d5d

File tree

1 file changed

+36
-1
lines changed

1 file changed

+36
-1
lines changed

src/main/java/weekly/wk317.java

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package weekly;
22

33
import java.util.ArrayList;
4+
import java.util.Deque;
45
import java.util.HashMap;
56
import java.util.HashSet;
67
import java.util.LinkedList;
@@ -106,7 +107,7 @@ public class TreeNode {
106107
//树形dp
107108
//先计算每个节点的深度
108109
//然后dfs计算每个节点删除后的树高度,max(右节点的深度+遍历深度,删除父节点的高度)
109-
public int[] treeQueries(TreeNode root, int[] queries) {
110+
/* public int[] treeQueries(TreeNode root, int[] queries) {
110111
dfs(root);
111112
checkMust(root, 0, 0);
112113
for (int i = 0; i < queries.length; i++) {
@@ -134,6 +135,40 @@ void checkMust(TreeNode parent, int rest, int up) {
134135
checkMust(parent.left, Math.max(rest, ints[0] + up), up + 1);
135136
ints = map.getOrDefault(parent.left != null ? parent.left.val : -1, new int[]{0});
136137
checkMust(parent.right, Math.max(rest, ints[0] + up), up + 1);
138+
}*/
139+
140+
List<Integer> Depths = new ArrayList<>();
141+
Map<Integer, Integer> number = new HashMap<>();
142+
Map<Integer, Integer> map = new HashMap<>();
143+
144+
//DFS序
145+
public int[] treeQueries(TreeNode root, int[] queries) {
146+
dfs(root, 0);
147+
int[] L = new int[Depths.size() + 1];
148+
int[] R = new int[Depths.size() + 1];
149+
for (int i = 0; i < Depths.size(); i++) {
150+
L[i + 1] = Math.max(L[i], Depths.get(i));
151+
}
152+
for (int i = Depths.size() - 1; i >= 0; i--) {
153+
R[i] = Math.max(R[i + 1], Depths.get(i));
154+
}
155+
for (int i = 0; i < queries.length; i++) {
156+
int len=map.get(queries[i]);
157+
int begin=number.get(queries[i]);
158+
queries[i] = Math.max(L[begin], R[begin+len+1]);
159+
}
160+
return queries;
161+
}
162+
163+
void dfs(TreeNode node, int depth) {
164+
if (node == null) return;
165+
Depths.add(depth);
166+
int before = Depths.size();
167+
number.put(node.val, Depths.size() - 1);
168+
dfs(node.left, depth + 1);
169+
dfs(node.right, depth + 1);
170+
int after = Depths.size();
171+
map.put(node.val, after - before);
137172
}
138173

139174
}

0 commit comments

Comments
 (0)