-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy pathFindLargestValueInEachTreeRow.java
More file actions
151 lines (138 loc) · 3.55 KB
/
Copy pathFindLargestValueInEachTreeRow.java
File metadata and controls
151 lines (138 loc) · 3.55 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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
/**
* <p>给定一棵二叉树的根节点 <code>root</code> ,请找出该二叉树中每一层的最大值。</p>
*
* <p> </p>
*
* <p><strong>示例1:</strong></p>
*
* <pre>
* <strong>输入: </strong>root = [1,3,2,5,3,null,9]
* <strong>输出: </strong>[1,3,9]
* <strong>解释:</strong>
* 1
* / \
* 3 2
* / \ \
* 5 3 9
* </pre>
*
* <p><strong>示例2:</strong></p>
*
* <pre>
* <strong>输入: </strong>root = [1,2,3]
* <strong>输出: </strong>[1,3]
* <strong>解释:</strong>
* 1
* / \
* 2 3
* </pre>
*
* <p><strong>示例3:</strong></p>
*
* <pre>
* <strong>输入: </strong>root = [1]
* <strong>输出: </strong>[1]
* </pre>
*
* <p><strong>示例4:</strong></p>
*
* <pre>
* <strong>输入: </strong>root = [1,null,2]
* <strong>输出: </strong>[1,2]
* <strong>解释:</strong>
* 1
* \
* 2
* </pre>
*
* <p><strong>示例5:</strong></p>
*
* <pre>
* <strong>输入: </strong>root = []
* <strong>输出: </strong>[]
* </pre>
*
* <p> </p>
*
* <p><strong>提示:</strong></p>
*
* <ul>
* <li>二叉树的节点个数的范围是 <code>[0,10<sup>4</sup>]</code></li>
* <li><meta charset="UTF-8" /><code>-2<sup>31</sup> <= Node.val <= 2<sup>31</sup> - 1</code></li>
* </ul>
* <div><div>Related Topics</div><div><li>树</li><li>深度优先搜索</li><li>广度优先搜索</li><li>二叉树</li></div></div><br><div><li>👍 160</li><li>👎 0</li></div>
*/
package leetcode4;
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Deque;
import java.util.List;
public class FindLargestValueInEachTreeRow {
public static void main(String[] args) {
Solution solution = new FindLargestValueInEachTreeRow().new Solution();
}
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;
}
}
/**
* DFS
*/
class Solution {
public List<Integer> largestValues(TreeNode root) {
List<Integer> res = new ArrayList<>();
solve(res, root, 0);
return res;
}
private void solve(List<Integer> res, TreeNode node, int level) {
if (node == null) {
return;
}
if (res.size() <= level) {
res.add(node.val);
} else {
res.set(level, Math.max(res.get(level), node.val));
}
solve(res, node.left, level + 1);
solve(res, node.right, level + 1);
}
}
/**
* BFS
*/
class Solution1 {
public List<Integer> largestValues(TreeNode root) {
List<Integer> res = new ArrayList<>();
Deque<TreeNode> deque = new ArrayDeque<>();
offer(deque, root);
while (!deque.isEmpty()) {
int max = Integer.MIN_VALUE;
int size = deque.size();
for (int i = 0; i < size; i++) {
TreeNode node = deque.poll();
max = Math.max(max, node.val);
offer(deque, node.left);
offer(deque, node.right);
}
res.add(max);
}
return res;
}
private void offer(Deque<TreeNode> deque, TreeNode node) {
if (node != null) {
deque.offer(node);
}
}
}
}