Skip to content

Commit 26bd3a0

Browse files
committed
feat: add python and java solutions to lcof problems
1 parent 1a58283 commit 26bd3a0

File tree

9 files changed

+123
-213
lines changed

9 files changed

+123
-213
lines changed

lcof/面试题32 - I. 从上到下打印二叉树/README.md

+24-29
Original file line numberDiff line numberDiff line change
@@ -40,22 +40,22 @@
4040
# self.left = None
4141
# self.right = None
4242

43-
from queue import Queue
44-
4543
class Solution:
4644
def levelOrder(self, root: TreeNode) -> List[int]:
4745
if root is None:
4846
return []
49-
s = Queue()
47+
q = deque()
48+
q.append(root)
5049
res = []
51-
s.put(root)
52-
while not s.empty():
53-
node = s.get()
54-
res.append(node.val)
55-
if node.left:
56-
s.put(node.left)
57-
if node.right:
58-
s.put(node.right)
50+
while q:
51+
size = len(q)
52+
for _ in range(size):
53+
node = q.popleft()
54+
res.append(node.val)
55+
if node.left:
56+
q.append(node.left)
57+
if node.right:
58+
q.append(node.right)
5959
return res
6060
```
6161

@@ -73,30 +73,25 @@ class Solution:
7373
*/
7474
class Solution {
7575
public int[] levelOrder(TreeNode root) {
76-
if (root == null) {
77-
return new int[0];
78-
}
79-
Queue<TreeNode> q = new LinkedList<>();
80-
Queue<Integer> s = new LinkedList<>();
76+
if (root == null) return new int[]{};
77+
Deque<TreeNode> q = new ArrayDeque<>();
78+
List<Integer> t = new ArrayList<>();
8179
q.offer(root);
82-
8380
while (!q.isEmpty()) {
84-
TreeNode node = q.poll();
85-
s.offer(node.val);
86-
if (node.left != null) {
87-
q.offer(node.left);
88-
}
89-
if (node.right != null) {
90-
q.offer(node.right);
81+
int size = q.size();
82+
while (size-- > 0) {
83+
TreeNode node = q.poll();
84+
t.add(node.val);
85+
if (node.left != null) q.offer(node.left);
86+
if (node.right != null) q.offer(node.right);
9187
}
9288
}
93-
int[] res = new int[s.size()];
94-
95-
for (int i = 0, len = s.size(); i < len; ++i) {
96-
res[i] = s.poll();
89+
int i = 0, n = t.size();
90+
int[] res = new int[n];
91+
for (Integer e : t) {
92+
res[i++] = e;
9793
}
9894
return res;
99-
10095
}
10196
}
10297
```

lcof/面试题32 - I. 从上到下打印二叉树/Solution.java

+13-18
Original file line numberDiff line numberDiff line change
@@ -9,29 +9,24 @@
99
*/
1010
class Solution {
1111
public int[] levelOrder(TreeNode root) {
12-
if (root == null) {
13-
return new int[0];
14-
}
15-
Queue<TreeNode> q = new LinkedList<>();
16-
Queue<Integer> s = new LinkedList<>();
12+
if (root == null) return new int[]{};
13+
Deque<TreeNode> q = new ArrayDeque<>();
14+
List<Integer> t = new ArrayList<>();
1715
q.offer(root);
18-
1916
while (!q.isEmpty()) {
20-
TreeNode node = q.poll();
21-
s.offer(node.val);
22-
if (node.left != null) {
23-
q.offer(node.left);
24-
}
25-
if (node.right != null) {
26-
q.offer(node.right);
17+
int size = q.size();
18+
while (size-- > 0) {
19+
TreeNode node = q.poll();
20+
t.add(node.val);
21+
if (node.left != null) q.offer(node.left);
22+
if (node.right != null) q.offer(node.right);
2723
}
2824
}
29-
int[] res = new int[s.size()];
30-
31-
for (int i = 0, len = s.size(); i < len; ++i) {
32-
res[i] = s.poll();
25+
int i = 0, n = t.size();
26+
int[] res = new int[n];
27+
for (Integer e : t) {
28+
res[i++] = e;
3329
}
3430
return res;
35-
3631
}
3732
}

lcof/面试题32 - I. 从上到下打印二叉树/Solution.py

+12-12
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,20 @@
55
# self.left = None
66
# self.right = None
77

8-
from queue import Queue
9-
108
class Solution:
119
def levelOrder(self, root: TreeNode) -> List[int]:
1210
if root is None:
1311
return []
14-
s = Queue()
12+
q = deque()
13+
q.append(root)
1514
res = []
16-
s.put(root)
17-
while not s.empty():
18-
node = s.get()
19-
res.append(node.val)
20-
if node.left:
21-
s.put(node.left)
22-
if node.right:
23-
s.put(node.right)
24-
return res
15+
while q:
16+
size = len(q)
17+
for _ in range(size):
18+
node = q.popleft()
19+
res.append(node.val)
20+
if node.left:
21+
q.append(node.left)
22+
if node.right:
23+
q.append(node.right)
24+
return res

lcof/面试题32 - II. 从上到下打印二叉树 II/README.md

+17-33
Original file line numberDiff line numberDiff line change
@@ -44,30 +44,24 @@
4444
# self.left = None
4545
# self.right = None
4646

47-
from queue import Queue
48-
4947
class Solution:
5048
def levelOrder(self, root: TreeNode) -> List[List[int]]:
5149
if root is None:
5250
return []
53-
q = Queue()
54-
q.put(root)
55-
cnt = 1
51+
q = deque()
5652
res = []
57-
while not q.empty():
53+
q.append(root)
54+
while q:
55+
size = len(q)
5856
t = []
59-
num = 0
60-
for _ in range(cnt):
61-
node = q.get()
57+
for _ in range(size):
58+
node = q.popleft()
6259
t.append(node.val)
63-
if node.left:
64-
q.put(node.left)
65-
num += 1
66-
if node.right:
67-
q.put(node.right)
68-
num += 1
60+
if node.left is not None:
61+
q.append(node.left)
62+
if node.right is not None:
63+
q.append(node.right)
6964
res.append(t)
70-
cnt = num
7165
return res
7266
```
7367

@@ -85,30 +79,20 @@ class Solution:
8579
*/
8680
class Solution {
8781
public List<List<Integer>> levelOrder(TreeNode root) {
88-
if (root == null) {
89-
return new ArrayList<>();
90-
}
91-
Queue<TreeNode> q = new LinkedList<>();
92-
int cnt = 1;
93-
q.offer(root);
82+
if (root == null) return Collections.emptyList();
83+
Deque<TreeNode> q = new ArrayDeque<>();
9484
List<List<Integer>> res = new ArrayList<>();
85+
q.offer(root);
9586
while (!q.isEmpty()) {
87+
int size = q.size();
9688
List<Integer> t = new ArrayList<>();
97-
int num = 0;
98-
while (cnt-- > 0) {
89+
while (size-- > 0) {
9990
TreeNode node = q.poll();
10091
t.add(node.val);
101-
if (node.left != null) {
102-
q.offer(node.left);
103-
++num;
104-
}
105-
if (node.right != null) {
106-
q.offer(node.right);
107-
++num;
108-
}
92+
if (node.left != null) q.offer(node.left);
93+
if (node.right != null) q.offer(node.right);
10994
}
11095
res.add(t);
111-
cnt = num;
11296
}
11397
return res;
11498
}

lcof/面试题32 - II. 从上到下打印二叉树 II/Solution.java

+7-17
Original file line numberDiff line numberDiff line change
@@ -9,30 +9,20 @@
99
*/
1010
class Solution {
1111
public List<List<Integer>> levelOrder(TreeNode root) {
12-
if (root == null) {
13-
return new ArrayList<>();
14-
}
15-
Queue<TreeNode> q = new LinkedList<>();
16-
int cnt = 1;
17-
q.offer(root);
12+
if (root == null) return Collections.emptyList();
13+
Deque<TreeNode> q = new ArrayDeque<>();
1814
List<List<Integer>> res = new ArrayList<>();
15+
q.offer(root);
1916
while (!q.isEmpty()) {
17+
int size = q.size();
2018
List<Integer> t = new ArrayList<>();
21-
int num = 0;
22-
while (cnt-- > 0) {
19+
while (size-- > 0) {
2320
TreeNode node = q.poll();
2421
t.add(node.val);
25-
if (node.left != null) {
26-
q.offer(node.left);
27-
++num;
28-
}
29-
if (node.right != null) {
30-
q.offer(node.right);
31-
++num;
32-
}
22+
if (node.left != null) q.offer(node.left);
23+
if (node.right != null) q.offer(node.right);
3324
}
3425
res.add(t);
35-
cnt = num;
3626
}
3727
return res;
3828
}

lcof/面试题32 - II. 从上到下打印二叉树 II/Solution.py

+11-17
Original file line numberDiff line numberDiff line change
@@ -5,28 +5,22 @@
55
# self.left = None
66
# self.right = None
77

8-
from queue import Queue
9-
108
class Solution:
119
def levelOrder(self, root: TreeNode) -> List[List[int]]:
1210
if root is None:
1311
return []
14-
q = Queue()
15-
q.put(root)
16-
cnt = 1
12+
q = deque()
1713
res = []
18-
while not q.empty():
14+
q.append(root)
15+
while q:
16+
size = len(q)
1917
t = []
20-
num = 0
21-
for _ in range(cnt):
22-
node = q.get()
18+
for _ in range(size):
19+
node = q.popleft()
2320
t.append(node.val)
24-
if node.left:
25-
q.put(node.left)
26-
num += 1
27-
if node.right:
28-
q.put(node.right)
29-
num += 1
21+
if node.left is not None:
22+
q.append(node.left)
23+
if node.right is not None:
24+
q.append(node.right)
3025
res.append(t)
31-
cnt = num
32-
return res
26+
return res

0 commit comments

Comments
 (0)