-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathMain129.java
More file actions
131 lines (119 loc) · 3.51 KB
/
Main129.java
File metadata and controls
131 lines (119 loc) · 3.51 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
package HOT100;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
public class Main129 {
List<Integer> list = new ArrayList<>();
public int sumNumbers(TreeNode root) {
if(root==null){
return 0;
}
StringBuffer sb = new StringBuffer();
dfs(root, sb);
int sum=0;
for(int i: list){
sum+=i;
}
return sum;
}
void dfs(TreeNode root, StringBuffer sb){
if(root.left==null && root.right==null){
sb.append(root.val);
list.add(Integer.valueOf(sb.toString()));
sb.deleteCharAt(sb.length()-1);
return;
}
sb.append(root.val);
if(root.left != null) dfs(root.left, sb);
if(root.right != null) dfs(root.right, sb);
sb.deleteCharAt(sb.length()-1);
}
public static void main(String[] args) {
String str = "[4,9,0,5,1,null,null]";
TreeNode root = mkTree(str);
Main129 main = new Main129();
int sum = main.sumNumbers(root);
System.out.println(sum);
}
private static int[] StrToIntArray(String str){
str = str.substring(1, str.length()-1);
String[] strs = str.split(",");
int[] arr = new int[strs.length];
for (int i=0; i<arr.length; i++){
if(strs[i].equals("null")){
arr[i] = Integer.MAX_VALUE;
}else {
arr[i] = Integer.parseInt(strs[i]);
}
}
return arr;
}
private static TreeNode mkTree(String str){
int[] arr = StrToIntArray(str);
TreeNode[] nodes = new TreeNode[arr.length+1];
for(int i=1; i< nodes.length; i++){
if(arr[i-1] != Integer.MAX_VALUE){
nodes[i] = new TreeNode(arr[i-1]);
}else{
nodes[i] = null;
}
}
TreeNode node = null;
for(int i=1; i< nodes.length/2; i++){
node = nodes[i];
if(node == null) continue;
node.left=nodes[2*i];
node.right=nodes[2*i+1];
}
return nodes[1];
}
}
// 深度优先遍历
class Main129_1{
public int sumNumbers(TreeNode root){
return dfs(root, 0);
}
public int dfs(TreeNode root, int prevSum){
if(root==null){
return 0;
}
int sum = prevSum * 10 + root.val;
if(root.left==null && root.right==null){
return sum;
}else {
return dfs(root.left, sum) + dfs(root.right, sum);
}
}
}
// 广度优先搜索
class Main129_2{
public int sumNumbers(TreeNode root){
if(root==null){
return 0;
}
int sum=0;
Queue<TreeNode> nodeQueue = new LinkedList<>();
Queue<Integer> numQueue = new LinkedList<>();
nodeQueue.offer(root);
numQueue.offer(root.val);
while (!nodeQueue.isEmpty()){
TreeNode node = nodeQueue.poll();
int num = numQueue.poll();
TreeNode left = node.left, right = node.right;
if(left == null && right == null){
sum+=num;
}else {
if(left != null){
nodeQueue.offer(left);
numQueue.offer(num*10 + left.val);
}
if(right != null){
nodeQueue.offer(right);
numQueue.offer(num*10 + right.val);
}
}
}
return sum;
}
}