AlgoDesign

Exterior binary tree

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]