vertical order traversal of a binary tree
My solution. Runs faster than 82% of python solutions. I also think it's the cleanest.
https://leetcode.com/problems/vertical-order-traversal-of-a-binary-tree
1from collections import defaultdict as dd
2
3
4class TreeNode:
5 def __init__(self, val=0, left=None, right=None):
6 self.val = val
7 self.left = left
8 self.right = right
9
10 def __str__(self):
11 return str(self.val)
12
13
14class Solution:
15 def verticalTraversal(self, root):
16 def rec(node, lr, d):
17 if node:
18 vals[lr].append((d, node.val))
19 rec(node.left, lr - 1, d + 1)
20 rec(node.right, lr + 1, d + 1)
21
22 vals = dd(list)
23 rec(root, 0, 0)
24 return [
25 *map(lambda x: [*map(lambda x: x[1], sorted(x[1]))], sorted(vals.items()))
26 ]
27
28
29null = None
30
31t = [0, 8, 1, null, null, 3, 2, null, 4, 5, null, null, 7, 6]
32t = TreeNode(
33 0,
34 TreeNode(8),
35 TreeNode(
36 1,
37 TreeNode(3, None, TreeNode(4, None, TreeNode(7))),
38 TreeNode(2, TreeNode(5, TreeNode(6))),
39 ),
40)
41r = Solution().verticalTraversal(t)
42print(r)