File tree

4 files changed

+128
-0
lines changed

4 files changed

+128
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
class Solution:
2+
def preorder(self, root: 'Node') -> List[int]:
3+
self.res = []
4+
if not root: return self.res
5+
self.traverse(root)
6+
return self.res
7+
8+
def traverse(self, node):
9+
if not node: return
10+
self.res.append(node.val)
11+
for child in node.children:
12+
self.traverse(child)
13+
14+
class Solution2:
15+
def preorder(self, root: 'Node') -> List[int]:
16+
if root is None: return []
17+
18+
stack = [root]
19+
output = []
20+
21+
while stack:
22+
node = stack.pop()
23+
output.append(node.val)
24+
for i in range(len(node.children) - 1, -1, -1):
25+
stack.append(node.children[i])
26+
27+
return output
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
class Solution:
2+
def postorder(self, root: 'Node') -> List[int]:
3+
self.res = []
4+
if not root: return self.res
5+
self.traverse(root)
6+
return self.res
7+
8+
def traverse(self, node):
9+
if not node: return
10+
11+
for child in node.children:
12+
self.traverse(child)
13+
14+
self.res.append(node.val)
15+
16+
class Solution2:
17+
def postorder(self, root: 'Node') -> List[int]:
18+
res = []
19+
if not root: return res
20+
21+
stack = [root]
22+
output = []
23+
while stack:
24+
node = stack.pop()
25+
if node:
26+
res.append(node.val)
27+
for child in node.children:
28+
stack.append(child)
29+
30+
return res[::-1]
31+
32+
class Solution3:
33+
def postorder(self, root: 'Node') -> List[int]:
34+
if not root: return []
35+
36+
res = []
37+
stack1 = [root]
38+
stack2 = []
39+
40+
while stack1:
41+
node = stack1.pop()
42+
stack2.append(node)
43+
for child in node.children:
44+
stack1.append(child)
45+
46+
while stack2:
47+
val = stack2.pop().val
48+
res.append(val)
49+
50+
return res
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
from collections import deque
2+
3+
class Solution:
4+
def levelOrder(self, root: 'Node') -> List[List[int]]:
5+
if not root: return []
6+
7+
res = []
8+
q = deque()
9+
q.append(root)
10+
11+
while q:
12+
level = []
13+
for _ in range(len(q)):
14+
node = q.popleft()
15+
level.append(node.val)
16+
for child in node.children:
17+
q.append(child)
18+
res.append(level)
19+
20+
return res
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
class Solution:
2+
def maxDepth(self, root: 'Node') -> int:
3+
if not root: return 0
4+
5+
self.max_depth = 1
6+
self.traverse(root, 1)
7+
return self.max_depth
8+
9+
def traverse(self, node, depth):
10+
if not node: return
11+
12+
self.max_depth = max(depth, self.max_depth)
13+
for child in node.children:
14+
self.traverse(child, depth + 1)
15+
16+
class Solution2:
17+
def maxDepth(self, root: 'Node') -> int:
18+
if not root: return 0
19+
20+
stack = []
21+
stack.append((1, root))
22+
depth = 0
23+
24+
while stack:
25+
cur_depth, node = stack.pop()
26+
if node:
27+
depth = max(cur_depth, depth)
28+
for child in node.children:
29+
stack.append((cur_depth + 1, child))
30+
31+
return depth

0 commit comments

Comments
 (0)