1class Solution:
2 def exteriorBinaryTree(self, root):
3 self.res = [root]
4
5 def rootToLeftmost(node):
6 if not node: return
7 self.res.append(node.val)
8 if node.left: rootToLeftmost(node.left)
9 else: rootToLeftmost(node.right)
10
11 def leaves(node):
12 if not node: return
13 if not node.left and not node.right and self.res[-1] != node.val: self.res.append(node.val)
14 leaves(node.left)
15 leaves(node.right)
16
17 def rootToRightmost(node):
18 if not node: return
19 self.res.append(node.val)
20 if node.right: rootToRightmost(node.right)
21 else: rootToRightmost(node.left)
22
23 rootToLeftmost(root.left)
24 leaves(root.left)
25 leaves(root.right)
26 rootToRightmost(root.right)
27 return self.res[:-1]