Skip to content

Commit 615ebf4

Browse files
committed
2020-4-26
1 parent 1a5e02d commit 615ebf4

File tree

6 files changed

+159
-0
lines changed

6 files changed

+159
-0
lines changed
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package question0663_equal_tree_partition;
2+
3+
import java.util.HashSet;
4+
import java.util.Set;
5+
6+
/**
7+
* 如果树中所有节点的和 total 是一个奇数,显然无法去掉一条边将其分成两颗节点和相同的子树。
8+
*
9+
* 如果树中所有节点的和 total 是一个偶数,去寻找一颗子树(不包括原树本身),该子树的节点和为 total 的一半。
10+
*
11+
* 时间复杂度和空间复杂度均是O(n),其中n为树中的节点个数。
12+
*
13+
* 执行用时:3ms,击败59.09%。消耗内存:40.9MB,击败100.00%
14+
*/
15+
public class Solution {
16+
private Set<Integer> set = new HashSet<>();
17+
18+
public boolean checkEqualTree(TreeNode root) {
19+
int total = sum(root, root);
20+
if ((total & 1) == 1) {
21+
return false;
22+
}
23+
return set.contains(total >> 1);
24+
}
25+
26+
private int sum(TreeNode treeNode, TreeNode root) {
27+
if (null == treeNode) {
28+
return 0;
29+
}
30+
int result = treeNode.val + sum(treeNode.left, root) + sum(treeNode.right, root);
31+
if (treeNode != root) {
32+
set.add(result);
33+
}
34+
return result;
35+
}
36+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package question0663_equal_tree_partition;
2+
3+
public class TreeNode {
4+
int val;
5+
6+
TreeNode left;
7+
8+
TreeNode right;
9+
10+
TreeNode(int x) {
11+
val = x;
12+
}
13+
}
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package question0742_closest_leaf_in_a_binary_tree;
2+
3+
import java.util.*;
4+
5+
/**
6+
* 将树转化为图,再广搜。
7+
*
8+
* 时间复杂度和空间复杂度均是O(n),其中n为树中的节点个数。
9+
*
10+
* 执行用时:7ms,击败40.82%。消耗内存:39.6MB,击败100.00%。
11+
*/
12+
public class Solution {
13+
public int findClosestLeaf(TreeNode root, int k) {
14+
if (root.left == null && root.right == null) {
15+
return k;
16+
}
17+
List<Integer>[] graph = new List[1001];
18+
for (int i = 0; i < graph.length; i++) {
19+
graph[i] = new ArrayList<>();
20+
}
21+
Queue<TreeNode> queue1 = new LinkedList<>();
22+
queue1.add(root);
23+
boolean[] isLeaf = new boolean[1001];
24+
while (!queue1.isEmpty()) {
25+
TreeNode now = queue1.poll();
26+
if (now.left == null && now.right == null) {
27+
isLeaf[now.val] = true;
28+
}
29+
if (now.left != null) {
30+
graph[now.val].add(now.left.val);
31+
graph[now.left.val].add(now.val);
32+
queue1.add(now.left);
33+
}
34+
if (now.right != null) {
35+
graph[now.val].add(now.right.val);
36+
graph[now.right.val].add(now.val);
37+
queue1.add(now.right);
38+
}
39+
}
40+
Queue<Integer> queue2 = new LinkedList<>();
41+
queue2.add(k);
42+
boolean[] visited = new boolean[1001];
43+
while (!queue2.isEmpty()) {
44+
int qSize = queue2.size();
45+
for (int i = 0; i < qSize; i++) {
46+
int now = queue2.poll();
47+
visited[now] = true;
48+
if (isLeaf[now]) {
49+
return now;
50+
}
51+
for (int j = 0; j < graph[now].size(); j++) {
52+
if (!visited[graph[now].get(j)]) {
53+
queue2.add(graph[now].get(j));
54+
}
55+
}
56+
}
57+
}
58+
return -1;
59+
}
60+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package question0742_closest_leaf_in_a_binary_tree;
2+
3+
public class TreeNode {
4+
int val;
5+
6+
TreeNode left;
7+
8+
TreeNode right;
9+
10+
TreeNode(int x) {
11+
val = x;
12+
}
13+
}

question0776_split_bst/Solution.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package question0776_split_bst;
2+
3+
/**
4+
* 执行用时:0ms,击败100.00%。消耗内存:37.6MB,击败100.00%。
5+
*/
6+
public class Solution {
7+
public TreeNode[] splitBST(TreeNode root, int V) {
8+
if (null == root) {
9+
return new TreeNode[] {null, null};
10+
}
11+
if (root.val == V) {
12+
TreeNode treeNode = root.right;
13+
root.right = null;
14+
return new TreeNode[] {root, treeNode};
15+
} else if (root.val > V) {
16+
TreeNode[] leftResult = splitBST(root.left, V);
17+
root.left = leftResult[1];
18+
return new TreeNode[] {leftResult[0], root};
19+
}
20+
TreeNode[] rightResult = splitBST(root.right, V);
21+
root.right = rightResult[0];
22+
return new TreeNode[] {root, rightResult[1]};
23+
}
24+
}

question0776_split_bst/TreeNode.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package question0776_split_bst;
2+
3+
public class TreeNode {
4+
int val;
5+
6+
TreeNode left;
7+
8+
TreeNode right;
9+
10+
TreeNode(int x) {
11+
val = x;
12+
}
13+
}

0 commit comments

Comments
 (0)