File tree 9 files changed +123
-213
lines changed
面试题32 - III. 从上到下打印二叉树 III
9 files changed +123
-213
lines changed Original file line number Diff line number Diff line change 40
40
# self.left = None
41
41
# self.right = None
42
42
43
- from queue import Queue
44
-
45
43
class Solution :
46
44
def levelOrder (self , root : TreeNode) -> List[int ]:
47
45
if root is None :
48
46
return []
49
- s = Queue()
47
+ q = deque()
48
+ q.append(root)
50
49
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)
59
59
return res
60
60
```
61
61
@@ -73,30 +73,25 @@ class Solution:
73
73
*/
74
74
class Solution {
75
75
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<> ();
81
79
q. offer(root);
82
-
83
80
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);
91
87
}
92
88
}
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 ;
97
93
}
98
94
return res;
99
-
100
95
}
101
96
}
102
97
```
Original file line number Diff line number Diff line change 9
9
*/
10
10
class Solution {
11
11
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 <>();
17
15
q .offer (root );
18
-
19
16
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 );
27
23
}
28
24
}
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 ;
33
29
}
34
30
return res ;
35
-
36
31
}
37
32
}
Original file line number Diff line number Diff line change 5
5
# self.left = None
6
6
# self.right = None
7
7
8
- from queue import Queue
9
-
10
8
class Solution :
11
9
def levelOrder (self , root : TreeNode ) -> List [int ]:
12
10
if root is None :
13
11
return []
14
- s = Queue ()
12
+ q = deque ()
13
+ q .append (root )
15
14
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
Original file line number Diff line number Diff line change 44
44
# self.left = None
45
45
# self.right = None
46
46
47
- from queue import Queue
48
-
49
47
class Solution :
50
48
def levelOrder (self , root : TreeNode) -> List[List[int ]]:
51
49
if root is None :
52
50
return []
53
- q = Queue()
54
- q.put(root)
55
- cnt = 1
51
+ q = deque()
56
52
res = []
57
- while not q.empty():
53
+ q.append(root)
54
+ while q:
55
+ size = len (q)
58
56
t = []
59
- num = 0
60
- for _ in range (cnt):
61
- node = q.get()
57
+ for _ in range (size):
58
+ node = q.popleft()
62
59
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)
69
64
res.append(t)
70
- cnt = num
71
65
return res
72
66
```
73
67
@@ -85,30 +79,20 @@ class Solution:
85
79
*/
86
80
class Solution {
87
81
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<> ();
94
84
List<List<Integer > > res = new ArrayList<> ();
85
+ q. offer(root);
95
86
while (! q. isEmpty()) {
87
+ int size = q. size();
96
88
List<Integer > t = new ArrayList<> ();
97
- int num = 0 ;
98
- while (cnt-- > 0 ) {
89
+ while (size-- > 0 ) {
99
90
TreeNode node = q. poll();
100
91
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);
109
94
}
110
95
res. add(t);
111
- cnt = num;
112
96
}
113
97
return res;
114
98
}
Original file line number Diff line number Diff line change 9
9
*/
10
10
class Solution {
11
11
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 <>();
18
14
List <List <Integer >> res = new ArrayList <>();
15
+ q .offer (root );
19
16
while (!q .isEmpty ()) {
17
+ int size = q .size ();
20
18
List <Integer > t = new ArrayList <>();
21
- int num = 0 ;
22
- while (cnt -- > 0 ) {
19
+ while (size -- > 0 ) {
23
20
TreeNode node = q .poll ();
24
21
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 );
33
24
}
34
25
res .add (t );
35
- cnt = num ;
36
26
}
37
27
return res ;
38
28
}
Original file line number Diff line number Diff line change 5
5
# self.left = None
6
6
# self.right = None
7
7
8
- from queue import Queue
9
-
10
8
class Solution :
11
9
def levelOrder (self , root : TreeNode ) -> List [List [int ]]:
12
10
if root is None :
13
11
return []
14
- q = Queue ()
15
- q .put (root )
16
- cnt = 1
12
+ q = deque ()
17
13
res = []
18
- while not q .empty ():
14
+ q .append (root )
15
+ while q :
16
+ size = len (q )
19
17
t = []
20
- num = 0
21
- for _ in range (cnt ):
22
- node = q .get ()
18
+ for _ in range (size ):
19
+ node = q .popleft ()
23
20
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 )
30
25
res .append (t )
31
- cnt = num
32
- return res
26
+ return res
You can’t perform that action at this time.
0 commit comments