forked from doocs/leetcode
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSolution.py
49 lines (43 loc) · 1.29 KB
/
Solution.py
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
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def boundaryOfBinaryTree(self, root: TreeNode) -> List[int]:
self.res = []
if not root:
return self.res
# root
if not self.is_leaf(root):
self.res.append(root.val)
# left boundary
t = root.left
while t:
if not self.is_leaf(t):
self.res.append(t.val)
t = t.left if t.left else t.right
# leaves
self.add_leaves(root)
# right boundary(reverse order)
s = []
t = root.right
while t:
if not self.is_leaf(t):
s.append(t.val)
t = t.right if t.right else t.left
while s:
self.res.append(s.pop())
# output
return self.res
def add_leaves(self, root):
if self.is_leaf(root):
self.res.append(root.val)
return
if root.left:
self.add_leaves(root.left)
if root.right:
self.add_leaves(root.right)
def is_leaf(self, node) -> bool:
return node and node.left is None and node.right is None