__author__ = 'clp' from utils import TreeNode class Solution(object): def invertTree(self, root): """ :type root: TreeNode :rtype: TreeNode """ def invert_tree(root): if root is None: return None root.left, root.right = root.right, root.left invert_tree(root.left) invert_tree(root.right) if root: invert_tree(root) return root if __name__ == '__main__': TreeNode.print_in_level_order(Solution().invertTree(TreeNode.build_by_level_order([4, 2, 7, 1, '#',6,9]))) TreeNode.print_in_level_order(Solution().invertTree(TreeNode.build_by_level_order([])))
from utils import TreeNode class Solution(object): def sumNumbers(self, root): """ :type root: TreeNode :rtype: int """ if root is None: return 0 current_level = [(root, 0)] s = 0 while current_level: next_level = [] for node, val in current_level: pivot = val * 10 + node.val if node.left: next_level.append((node.left, pivot)) if node.right: next_level.append((node.right, pivot)) if node.left == node.right == None: s += pivot current_level = next_level return s if __name__ == '__main__': print Solution().sumNumbers(TreeNode.build_by_level_order([1, 2, 3])) print Solution().sumNumbers(TreeNode.build_by_level_order([1]))
:type root: TreeNode :rtype: int """ if not root: return 0 left, right = root.left, root.right left_height, right_height = 0, 0 while left: left_height += 1 left = left.left while right: right_height += 1 right = right.right if right_height == left_height: return (1 << (1+left_height)) - 1 else: # cl = self.countNodes(root.left) # cr = self.countNodes(root.right) # print "1 + %d + %d" % (cl, cr) # return 1 + cl + cr return 1 + self.countNodes(root.left) + self.countNodes(root.right) if __name__ == "__main__": print Solution().countNodes(TreeNode.build_by_level_order([1, 2, 3, '#', '#', '#', '#'])) print Solution().countNodes(TreeNode.build_by_level_order([1, 2, 3, 5, '#', '#', '#'])) print Solution().countNodes(TreeNode.build_by_level_order([1, 2, 3, 5, 6, '#', '#'])) print Solution().countNodes(None) print Solution().countNodes(TreeNode.build_by_level_order([1])) print Solution().countNodes(TreeNode.build_by_level_order([2,8,1,1,6,0,8,4,0,9,1,1,2,7,5,5,5,4,0,9,6,5,1,8,2,0,1,8,9,1,0,2,1,9,5,4,1,4,3,4,7,8,5,0,6,5,8,6,3,6,0,4,7,3,0,6,8,0,5,5,5,3,4,4,0,3,1,1,4,4,1,0,4,1,0,9,0,8,7,5,6,2,0,1,8,7,9,2,9,1,2,1,9,5,5,0,8,5,5,4,3,0,4,4,7,9,9,7,7,0,4,6,2,1,4,0,3,8,7,0,7,8,8,3,9,4,0,5,6,4,6,2,6,9,1,7,8,5,9,2,7,3,4,2,6,0,3,6,3,8,3,9,8,5,1,1,8,8,1,5,6,2,3,7,6,6,9,4,7,9,3,8,3,6,4,9,3,1,6,3,2,6,0,3,5,9,1,4,7,5,2,9,3,4,6,2,0,7,4,3,1,3,3,5,1,0,0,7,0,7,3,4,4,8,7,5,3,3,3,6,3,2,9,8,1,6,8,4,5,3,1,9,2,4,5,5,6,2,8,9,9,2,2,4,3,9,2,7,5,7,0,9,1,6,1,1,7,7,0,8,2,3,2,0,9,2,2,0,4,3,6,2,9,5,5,2,4,3,9,8,6,4,9,5,7,0,7,1,2,9,5,5,5,8,2,2,2,2,2,0,5,7,9,7,9,7,8,7,4,4,2,9,0,2,7,3,3,6,4,5,4,8,3,6,8,4,2,1,4,8,2,7,7,9,2,8,6,8,7,4,4,4,0,7,1,6,9,2,0,7,0,8,4,3,2,6,4,0,2,3,3,0,3,0,7,0,3,9,0,1,9,0,6,1,4,3,5,3,5,6,1,9,9,8,6,1,3,7,5,4,4,1,9,0,1,5,1,9,6,2,6,5,5,2,4,8,5,4,5,1,6,5,4,7,7,9,0,3,5,2,7,2,8,9,6,8,1,7,6,8,7,6,5,8,5,7,2,1,9,2,2,1,4,4,6,0,6,0,6,1,0,5,4,4,1,5,7,9,3,1,0,2,2,4,8,8,5,9,2,0,2,4,3,7,0,6,8,8,4,1,3,6,6,3,0,4,6,7,8,0,8,6,5,2,7,0,4,9,3,8,4,3,5,0,7,6,8,7,8,5,9,2,6,4,9,5,8,2,3,2,4,0,7,0,3,9,2,1,7,3,6,3,3,1,2,6,9,0,3,9,7,0,9,5,4,2,4,1,4,0,5,2,8,8,4,4,4,0,1,6,4,4,1,6,9,7,7,2,6,8,4,2,2,5,2,0,0,4,4,3,8,1,7,2,8,1,8,8,4,6,5,9,0,3,8,0,6,7,2,0,0,3,9,6,9,7,3,6,6,5,4,6,7,8,4,0,2,4,5,2,0,5,3,5,7,4,9,9,2,3,9,4,9,8,1,6,4,0,2,2,2,4,1,0,1,3,2,8,7,3,9,0,7,9,4,4,0,2,9,4,4,1,7,4,9,0,9,1,0,2,9,5,0,5,3,5,7,9,4,4,7,5,6,0,5,5,7,4,1,0,4,5,8,8,5,5,4,0,7,3,9,5,9,5,5,1,7,8,6,9,2,2,9,1,1,4,6,4,3,6,9,6,2,5,3,9,4,1,7,1,2,0,7,8,3,8,8,2,4,1,3,7,8,2,6,4,0,1,0,4,8,8,2,1,4,4,2,4,3,6,5,2,4,0,0,2,1,4,4,3,2,9,5,1,8,3,4,8,0,5,6,9,5,7,8,9,4,1,8,0,6,1,3,8,4,8,8,2,1,3,1,4,9,1,5,0,2,4,8,8,9,9,6,0,3,7,3,8,8,3,4,6,7,5,5,8,2,5,6,9,8,8,0,8,8,5,4,6,3,6,0,5,4,9,6,5,9,5,9,7,0,9,2,6,8,2,1,0,5,8,7,6,3,8,8,2,8,0,8,4,6,6,3,2,3,1,7,0,1,7,2,8,2,6,8,0,6,7,3,9,6,6,3,8,1,9,3,0,2,6,4,8,8,2,5,5,6,7,4,5,5,7,3,4,0,3,1,9,9,1,5,7,8,5,4,8,4,0,6,1,0,7,5,4,1,0,6,0,5,5,0,8,4,0,0,3,9,4,1,2,5,1,0,6,5,9,9,0,8,1,4,6,2,5,5,9,9,5,4,8,2,0,0,7,7,2,8,5,5,9,2,7,7,7,2,4,8,0,0,5,2,9,4,8,4,8,5,9,2,0,5,8,0,4,4,2,0,5,3,2,0,6,2,6,3,9,0,7,0,5,8,2,4,2,9,0,4,1,2,9,8,7,8,0,8,9,4,3,5,2,7,1,2,8,1,7,2,8,4,1,4,7,7,5,0,7,9,7,2,7,7,3,2,7,6,6,2,8,0,0,3,3,0,1,2,8,5,6,9,5,7,6,0,3,5,5,0,6,6,0,1,1,3,1,7,1,6,4,7,2,7,8,2,0,0,1,7,8,3,9,7,2,7,3,2,6,3,5,0,5,8,6,0,9,9,8,9,1,3,4,3,1,9,8,1,4,4,7,6,8,7,2,7,4,0,9,8,2,7,5,1,3,0,1,8,5,4,5,1,2,5,1,0,3,7,7,9,0,3,0,7,6,6,2,2,1,3,7,1,9,2,1,7,9,7,4,0,8,0,5,4,3,9,0,3,1,3,1,0,0,6,0,1,7,0,0,3,8,5,2,0,7,2,0,2,4,3,6,5,1,4,5,3,2,1,4,1,5,6,2,6,8,6,4,1,6,8,7,4,9,3,1,9,8,8,5,7,9,0,4,0,7,0,9,9,9,9,2,3,5,8,2,3,0,9,4,3,4,6,6,3,0,3,6,5,8,5,6,5,9,2,5,2,6,7,6,5,7,9,1,5,0,4,1,0,8,6,3,7,9,4,5,5,7,2,1,3,9,2,4,3,2,8,2,1,6,9,3,7,1,8,1,8,2,6,1,5,9,4,8,8,5,7,7,7,6,4,4,6,5,2,8,2,5,8,2,4,8,1,7,8,0,1,1,4,3,1,8,9,3,5,4,5,1,3,1,5,4,0,9,5,4,4,5,9,0,8,9,4,4,2,0,4,6,9,6,9,3,4,6,0,2,1,7,7,1,6,5,9,4,5,8,5,8,2,0,2,9,8,5,7,2,5,0,0,6,4,6,7,5,7,6,2,6,2,3,4,4,9,0,1,5,3,8,8,7,0,4,6,5,4,1,0,2,7,8,1,0,2,0,7,4,2,0,4,9,1,3,3,7,8,3,6,4,9,9,6,4,7,8,3,1,9,3,7,8,0,2,5,3,9,5,6,7,6,7,6,1,4,9,3,8,0,9,4,5,8,9,9,2,6,6,0,2,8,2,5,6,5,7,5,9,7,5,6,6,5,0,6,3,1,7,1,2,3,7,9,9,7,6,3,8,4,6,7,9,5,5,6,7,1,0,5,6,7,1,5,1,9,9,9,8,8,1,3,6,2,7,6,1,2,8,9,8,7,5,8,8,4,1,6,9,2,3,3,0,2,8,3,9,6,3,2,7,6,8,2,2,3,3,4,2,1,6,9,4,3,7,5,1,5,2,7,6,0,8,5,2,4,1,7,3,9,5,7,2,8,4,2,4,8,9,6,1,7,5,2,5,2,0,6,8,3,7,5,7,3,9,6,4,1,0,0,3,0,3,0,3,4,3,5,4,8,7,5,1,0,4,7,6,2,1,1,5,4,2,0,2,1,2,6,2,1,3,3,2,1,2,1,1,2,0,0,7,6,7,3,6,3,7,1,2,9,3,8,5,3,9,4,5,8,7,0,7,4,0,0,7,0,6,5,7,9,6,3,0,5,3,7,7,7,8,5,5,3,0,1,7,6,1,5,4,0,1,9,3,9,9,8,7,2,4,1,3,0,7,5,5,9,5,5,8,6,5,8,1,3,7,2,8,8,0,8,5,7,0,2,0,3,5,3,2,1,2,7,7,1,0,4,9,5,3,7,7,9,1,0,7,2,4,0,0,4,9,3,0,9,0,3,1,1,6,1,4,5,8,0,6,2,5,7,5,3,6,2,3,2,1,6,6,8,3,0,1,7,2,3,3,4,4,0,8,5,5,8,4,2,5,2,9,1,5,3,9,2,2,3,8,7,3,7,7,6,1,9,7,0,3,2,5,9,1,5,8,4,6,7,6,6,2,0,7,1,1,5,0,3,2,0,2,2,8,0,2,7,7,8,7,0,4,6,7,6,4,7,7,4,9,1,5,9,2,6,4,5,4,6,3,6,2,8,6,6,4,8,1,0,8,7,0,1,1,8,9,6,2,8,5,9,2,5,4,7,6,5,3,2,0,9,8,3,8,6,5,0,7,2,2,4,1,0,7,1,0,1,4,9,0,6,0,6,1,6,3,8,4,9,7,5,9,5,4,0,5,6,6,0,7,1,7,5,2,8,5,3,9,7,6,2,0,7,6,0,7,9,5,6,8,3,1,8,7,3,0,5,1,3,3,4,8,2,7,6,7,2,4,4,4,5,2,5,9,8,2,3,7,9,2,4,3,9,2,1,8,4,4,3,9,3,0,2,6,3,3,8,5,6,3,3,3,4,3,9,8,2,3,1,3,3,3,2,8,6,3,3,8,2,5,2,6,5,7,6,5,8,3,0,5,7,3,4,8,6,7,6,3,8,6,4,9,1,1,9,2,7,1,7,5,0,9,4,2,1,0,0,7,2,4,3,0,6,5,7,1,3,2,1,9,0,8,0,9,4,3,6,0,0,1,2,0,9,6,0,9,6,9,6,2,1,4,9,8,9,6,1,3,7,4,3,8,3,5,2,3,8,9,1,6,5,7,4,0,7,4,9,1,2,9,9,1,3,2,2,1,9,2,0,3,9,4,5,4,4,4,1,2,4,1,4,9,7,3,3,0,1,2,8,7,0,1,5,7,4,4,5,4,6,0,9,0,3,6,3,1,7,1,5,7,5,4,4,0,6,9,6,2,9,2,5,7,8,0,9,2,6,0,2,5,6,2,5,5,0,6,8,0,2,7,6,3,5,2,8,2,1,9,5,2,4,6,9,2,3,9,2,2,3,5,6,0,4,7,8,9,2,1,8,3,9,1,7,1,0,9,1,1,1,9,1,2,8,8,5,6,6,5,2,9,2,6,1,3,3,2,5,6,5,5,4,6,6,3,1,7,1,0,5,5,8,8,2,0,9,0,0,9,7,0,8,7,7,2,5,7,8,5,1,1,6,7,5,1,8,0,7,5,0,6,4,4,4,7,0,9,9,5,3,9,0,5,3,2,0,1,6,6,6,0,0,4,8,8,8,1,9,6,2,0,5,7,7,4,9,3,4,2,3,0,5,3,1,5,7,4,3,9,7,6,5,0,6,5,9,8,3,4,6,3,1,9,2,0,7,6,3,4,2,8,1,0,6,4,1,7,9,0,3,3,9,4,3,8,2,8,3,5,5,7,8,9,8,9,2,4,0,6,9,4,8,8,0,5,8,1,8,0,5,0,6,2,8,9,6,3,7,5,7,7,1,7,1,6,7,0,9,1,9,4,7,3,9,6,3,0,3,1,0,1,8,3,5,7,7,3,7,8,9,6,6,7,3,3,9,3,6,7,3,4,8,6,7,4,2,4,5,7,7,7,2,3,5,0,7,6,2,7,7,0,3,2,9,9,8,0,9,3,3,7,0,6,4,3,7,0,9,6,7,5,3,7,8,0,9,0,5,1,0,5,3,5,7,6,0,7,4,7,1,4,3,5,6,3,9,5,8,8,8,2,1,1,5,9,2,8,0,5,0,7,8,0,2,3,4,3,4,4,3,1,1,7,1,9,9,7,2,2,4,0,5,8,3,0,7,9,9,6,3,1,8,5,2,7,8,2,4,1,4,2,2,5,3,3,6,1,1,9,9,5,7,8,9,7,8,5,3,2,1,9,5,0,0,2,0,1,6,1,8,5,6,8,6,0,5,0,0,7,4,6,9,2,6,4,5,5,5,4,9,9,6,8,2,6,7,4,9,5,2,1,3,0,9,8,4,4,0,5,0,1,9,7,2,3,6,8,4,1,2,5,3,8,0,1,5,7,4,5,9,2,2,5,4,5,9,6,0,9,5,9,9,1,5,9,3,6,2,9,1,4,2,9,4,1,1,0,9,6,0,6,6,1,8,1,9,5,6,9,7,6,6,2,8,8,5,4,7,5,0,1,9,1,0,1,8,5,4,5,8,5,2,1,6,7,5,6,4,2,0,2,1,1,9,1,2,7,8,7,5,4,6,8,6,6,2,2,2,4,3,8,5,2,0,8,3,8,2,0,7,9,4,5,0,3,2,6,2,5,0,2,5,3,0,6,6,2,7,7,7,5,4,9,6,4,0,8,0,8,1,2,5,7,2,8,8,5,0,6,1,3,3,5,0,6,7,4,9,3,0,9,9,3,6,9,2,0,1,1,6,3,3,5,0,1,6,0,1,9,2,2,4,4,0,3,5,2,0,1,5,6,5,9,9,6,2,9,6,2,0,5,9,9,8,1,2,3,4,0,0,0,6,2,5,5,2,8,0,8,5,9,2,3,5,3,1,7,1,5,1,4,5,4,0,3,4,8,3,7,4,5,4,9,8,9,8,7,5,2,7,9,2,7,3,8,8,4,0,7,5,0,6,8,3,2,4,3,7,6,7,1,4,4,8,6,8,3,4,6,4,6,4,7,9,1,1,4,1,3,8,8,8,7,4,4,9,6,3,7,6,8,1,6,8,3,1,1,6,8,4,1,4,7,5,0,6,9,0,9,1,4,7,0,7,6,0,1,1,1,1,2,5,6,8,9,8,2,7,4,7,2,0,4,4,8,4,9,7,3,0,9,7,9,5,4,5,1,7,2,9,4,0,3,1,5,6,2,3,6,7,4,3,0,6,1,2,4,8,2,3,8,6,4,9,1,8,6,0,3,9,1,4,9,2,1,3,4,8,7,5,4,6,0,5,9,4,8,1,9,7,4,6,7,5,7,5,1,4,0,4,8,7,7,4,0,9,0,7,9,3,3,7,0,0,8,3,5,9,4,3,8,4,5,0,3,1,7,4,1,2,3,5,0,3,6,1,4,3,4,7,9,4,8,5,8,0,5,9,7,6,1,5,4,1,2,9,7,9,1,9,5,8,4,2,6,8,1,0,0,3,3,9,6,0,5,9,5,4,0,6,3,1,1,4,5,9,7,1,7,3,3,9,1,3,9,0,7,5,8,5,0,3,3,4,1,5,1,6,2,7,7,6,2,8,1,3,6,0,5,1,0,9,8,4,1,9,0,0,3,1,7,5,2,6,2,5,2,5,5,8,7,7,6,1,3,8,7,4,8,7,6,0,8,0,5,2,4,8,9,3,7,3,9,3,2,7,5,7,8,8,6,1,8,8,2,0,2,9,7,7,7,5,1,9,3,3,5,8,5,7,2,7,5,3,1,7,4,8,7,5,1,2,6,9,1,4,9,2,4,7,1,3,3,8,0,1,8,1,2,5,6,6,8,4,9,7,5,2,3,0,0,3,1,5,3,7,6,1,0,0,7,2,9,2,0,1,0,5,6,1,8,1,0,0,6,7,1,1,7,7,2,5,8,4,9,1,2,7,8,3,1,8,6,2,1,5,4,6,5,0,1,2,3,0,8,7,3,9,3,5,7,0,2,7,2,7,3,9,3,4,3,0,3,3,3,1,6,0,8,9,4,2,5,8,3,5,2,5,7,2,8,6,9,1,2,1,8,1,4,3,3,7,2,2,0,4,2,0,2,8,0,4,5,2,4,4,3,6,1,2,4,8,0,7,7,7,2,3,4,9,7,1,2,1,0,2,0,1,1,8,3,0,1,8,8,4,4,2,7,9,3,0,2,5,4,8,9,6,2,2,8,0,6,7,0,8,6,8,0,3,0,2,1,2,7,0,2,2,1,1,4,7,0,5,8,3,5,4,6,5,6,6,3,0,8,0,7,5,9,8,5,5,3,2,1,2,8,0,2,7,3,3,0,2,1,2,1,3,5,3,1,7,0,0,0,7,4,7,9,7,8,3,2,6,2,4,4,7,2,6,9,8,3,5,3,7,6,8,5,6,2,1,3,8,3,9,2,8,6,0,2,3,2,5,0,7,1,0,5,2,7,1,2,9,5,2,9,6,4,8,5,8,8,8,5,9,8,0,7,3,7,2,7,9,6,5,6,4,6,4,1,0,6,8,4,8,5,9,5,3,7,4,1,2,5,9,6,7,5,1,3,9,4,9,8,9,2,4,7,3,8,6,6,8,0,1,7,4,2,1,6,9,8,3,1,3,3,7,8,1,5,7,1,8,7,7,4,6,7,6,9,0,4,6,3,0,5,8,7,4,8,3,9,2,8,5,5,4,2,1,6,9,2,1,7,6,8,2,3,1,4,8,6,2,3,6,0,6,2,9,2,2,0,1,9,8,6,4,9,9,5,1,2,4,2,6,9,9,0,7,0,9,7,9,2,6,2,0,6,5,8,3,0,9,2,4,1,6,1,3,3,9,7,9,7,0,7,2,6,5,4,6,3,1,7,1,2,8,9,8,7,6,4,3,1,7,1,5,8,2,6,6,2,3,6,3,9,7,6,7,9,4,0,4,8,7,0,4,6,2,4,6,6,7,1,3,2,0,0,4,2,2,8,3,6,3,6,2,4,0,0,2,1,9,9,6,9,1,9,0,0,2,1,4,5,2,1,8,5,1,0,0,6,4,4,2,9,1,5,4,4,4,0,9,0,3,5,2,1,0,9,3,6,9,9,3,7,3,9,3,9,4,5,1,0,9,5,5,1,8,8,0,3,0,7,7,8,2,5,1,0,4,1,5,0,7,9,5,8,6,9,7,1,1,7,9,1,8,7,7,5,9,2,6,8,0,7,7,3,1,7,9,5,5,8,2,0,2,4,3,4,7,8,5,8,4,0,2,2,6,4,4,5,7,4,9,6,9,5,5,8,1,1,2,5,6,8,6,1,3,8,9,3,6,0,1,5,8,0,3,7,0,6,2,6,4,2,2,2,9,0,8,7,8,0,3,3,0,8,8,9,8,3,3,1,2,3,2,6,4,5,7,3,9,2,8,9,5,8,7,6,8,2,5,7,3,9,0,7,9,9,3,3,7,6,5,1,6,9,2,8,1,0,9,2,0,5,0,8,9,5,9,2,6,3,3,5,9,3,5,6,6,4,3,0,6,1,8,2,9,0,4,2,5,3,9,5,1,0,8,0,7,2,2,9,1,2,5,7,3,6,3,1,9,7,4,2,4,2,8,5,7,3,1,5,3,1,1,8,7,4,6,3,7,3,1,7,5,7,7,8,8,7,8,0,3,1,8,5,0,3,2,1,6,3,3,1,2,7,3,8,7,9,9,3,2,3,7,4,4,3,1,3,3,0,3,1,0,9,7,2,1,5,9,1,7,4,2,4,2,8,3,8,1,1,3,3,2,0,8,0,3,4,0,1,8,6,3,8,8,1,8,9,0,1,8,0,5,5,6,2,4,9,4,6,4,7,0,3,7,8,3,0,0,2,8,2,9,3,1,7,4,8,0,3,9,2,1,7,2,1,8,3,8,3,0,5,4,6,8,5,1,9,8,2,5,2,8,0,6,3,4,0,1,6,9,0,4,5,6,5,3,4,7,7,7,5,9,4,4,7,9,6,8,4,5,8,4,1,4,0,3,5,7,9,8,2,8,6,9,3,9,4,7,1,4,3,9,0,1,0,6,7,3,0,1,3,0,4,0,2,6,7,9,1,1,5,5,5,8,4,2,5,0,8,6,9,1,0,4,2,8,3,6,6,8,5,7,4,0,1,1,8,9,4,4,0,8,4,3,9,7,8,8,5,2,6,9,9,3,7,5,6,7,3,6,0,2,9,8,8,0,6,1,6,8,5,3,1,9,2,6,5,1,3,5,2,1,4,9,1,7,3,5,0,8,4,4,7,0,2,1,2,7,4,6,5,1,6,2,1,0,6,7,1,9,5,5,5,1,5,2,2,5,4,4,0,3,7,9,3,6,7,5,9,0,0,6,3,3,8,7,6,7,2,3,4,2,3,2,4,5,8,4,6,1,5,8,8,5,0,0,8,5,6,0,1,2,8,6,7,1,3,7,3,0,3,3,7,3,0,2,3,4,5,5,8,7,4,6,3,5,0,1,3,6,0,3,9,6,9,0,1,3,5,8,2,3,0,0,3,9,4,1,2,5,2,1,7,9,9,4,8,8,3,3,3,2,3,2,3,1,6,8,6,8,3,2,3,1,3,3,8,1,8,8,9,3,5,1,4,7,4,3,0,2,9,3,4,9,8,5,2,0,8,8,8,4,6,8,5,1,0,0,7,3,3,9,0,8,1,8,5,3,5,8,7,8,5,4,9,7,4,6,3,7,3,5,4,2,7,0,5,8,6,3,9,7,4,0,3,9,5,3,3,7,3,0,7,8,1,2,0,5,0,5,2,9,3,4,4,1,7,5,5,4,2,6,8,3,8,0,4,1,8,4,9,3,8,6,6,9,8,7,7,5,3,1,6,3,4,1,5,5,5,7,2,0,9,8,4,3,8,8,6,4,4,1,5,9,8,5,1,4,0,5,1,6,3,4,8,7,6,1,2,2,8,1,3,9,7,5,4,7,1,2,5,4,0,3,8,7,1,2,4,0,9,9,9,2,7,2,7,4,7,8,5,1,0,7,8,4,1,1,4,9,1,3,8,8,0,6,7,9,5,0,5,4,9,7,3,1,2,0,8,8,5,7,3,8,1,2,7,6,6,4,0,5,9,8,3,1,2,9,5,4,8,6,7,4,8,7,5,4,5,7,1,5,8,8,7,6,7,2,6,4,5,4,1,1,2,1,4,8,1,7,9,9,9,9,1,4,4,0,0,1,8,6,1,3,3,8,3,8,4,4,0,7,6,7,4,4,8,3,7,8,0,9,1,8,9,8,3,7,5,3,4,5,8,3,1,7,7,3,9,2,5,4,3,2,0,3,2,3,9,7,3,5,2,2,2,6,4,3,6,1,9,7,3,5,3,3,0,6,0,9,1,5,7,7,9,3,7,7,2,1,0,3,4,4,6,4,8,9,0,7,8,8,7,7,0,3,8,5,5,4,7,6,2,2,2,6,4,5,1,0,3,4,6,5,4,3,6,7,1,0,7,4,1,5,4,0,6,1,1,8,3,1,0,1,8,2,8,1,6,7,3,9,8,2,6,6,3,5,0,2,0,8,5,9,8,9,1,2,2,3,0,8,1,0,1,5,6,1,6,2,9,2,8,3,5,9,8,9,4,9,5,8,7,9,4,6,0,3,5,7,9,6,2,3,9,2,0,6,9,9,6,5,7,3,6,9,0,1,9,3,3,6,2,0,6,4,5,4,8,3,8,5,8,2,0,6,7,3,4,8,0,5,1,6,6,0,9,8,3,1,0,2,3,1,1,0,6,5,4,8,8,6,7,9,7,4,0,6,4,4,0,0,7,2,4,6,5,0,0,0,1,5,7,1,4,9,3,2,4,8,7,4,1,9,1,3,2,1,4,1,6,7,5,9,2,5,1,0,6,0,8,6,1,0,2,9,4,3,0,8,3,5,8,6,5,9,5,6,0,3,6,4,3,1,4,9,5,7,5,0,8,9,9,2,8,3,1,1,2,4,2,0,5,3,2,8,7,6,0,1,6,9,7,0,9,5,1,8,5,4,5,5,9,5,4,2,8,1,9,6,7,5,5,9,7,5,9,5,8,3,6,0,0,5,6,3,4,1,2,7,9,7,7,5,6,9,2,1,0,7,1,7,6,8,4,2,7,7,8,7,1,4,2,1,4,9,0,8,8,1,9,1,5,4,9,5,3,3,8,3,6,9,8,3,9,7,1,9,3,4,1,7,7,7,3,5,6,2,4,4,4,0,4,8,9,3,2,0,5,5,2,5,3,6,2,0,2,8,8,1,7,5,6,9,5,4,1,8,2,8,4,6,4,7,2,4,8,3,6,1,6,1,3,2,5,5,9,7,8,0,7,1,1,6,9,3,3,7,9,6,8,2,8,9,8,8,9,9,7,5,6,8,9,8,3,1,0,5,7,1,2,2,6,3,2,5,6,0,5,7,8,3,6,9,4,6,3,2,9,6,7,8,9,5,9,8,7,2,4,3,7,8,7,0,6,3,2,8,5,8,5,9,5,9,4,8,9,2,0,5,1,1,9,1,9,8,4,1,9,7,8,1,2,6,6,1,3,5,3,1,9,5,4,2,4,3,1,0,2,6,5,3,3,5,4,4,8,2,9,6,1,2,5,4,1,1,4,4,8,1,5,3,7,7,1,4,0,3,0,0,8,0,1,2,6,0,7,9,8,1,1,7,3,9,2,9,8,6,0,4,4,0,0,3,6,6,4,4,5,2,7,7,6,9,6,0,4,8,0,0,5,2,1,3,9,0,3,4,7,0,2,3,8,2,5,4,2,5,1,3,3,8,0,0,9,8,9,1,2,6,8,7,5,3,8,0,4,4,5,5,3,8,1,9,4,5,3,9,4,9,8,3,1,5,7,0,3,6,9,5,1,6,0,3,4,3,2,8,7,6,5,3,6,1,1,5,7,6,6,7,8,5,8,8,1,0,7,5,3,1,0,3,7,9,3,2,0,3,1,9,8,2,5,1,2,7,4,0,4,9,3,3,1,4,0,3,4,9,5,1,0,7,8,1,7,0,7,8,0,4,2,7,3,3,0,1,8,9,5,0,7,3,7,4,3,7,5,6,9,8,6,8,0,4,0,0,0,1,2,0,4,9,4,0,9,2,4,2,2,7,8,9,8,1,6,4,0,8,7,2,5,3,1,2,8,9,8,8,6,8,2,5,5,4,0,7,7,9,8,2,2,5,5,2,6,3,2,7,5,1,1,9,7,8,6,7,1,6,7,5,4,3,1,1,2,6,6,7,5,9,6,2,3,6,8,8,5,3,7,4,0,3,9,3,2,4,4,5,9,2,7,6,6,9,0,7,9,6,5,0,0,1,9,7,3,7,2,7,9,6,6,1,1,9,7,5,6,0,7,8,6,2,8,9,1,5,0,4,3,8,0,3,4,1,4,9,9,4,9,7,2,1,0,8,1,1,5,4,1,6,0,6,8,5,4,8,2,9,5,5,3,9,6,6,1,0,7,6,4,4,9,1,5,7,7,7,8,1,8,2,7,1,5,6,2,6,3,7,2,0,7,3,8,7,4,1,3,1,6,7,8,1,5,4,0,8,2,1,6,9,5,9,1,7,4,5,4,6,1,0,3,3,7,7,4,1,4,4,7,8,6,1,1,5,1,2,4,7,0,2,6,2,2,9,8,1,0,6,5,4,8,1,6,3,6,7,4,8,2,1,5,3,5,7,1,5,3,7,5,9,3,0,0,1,7,2,2,5,0,7,8,5,3,8,8,3,2,2,9,5,1,8,8,5,7,8,9,0,0,2,2,8,0,1,8,3,9,0,2,9,3,6,4,0,4,9,7,7,2,4,9,1,0,6,5,2,3,5,5,4,1,1,1,2,0,1,1,4,2,7,2,4,7,8,1,7,5,5,9,5,3,8,2,4,3,5,7,7,9,7,5,0,3,3,9,6,1,3,8,4,0,2,4,7,1,6,4,0,8,4,3,3,9,1,0,6,6,0,3,1,9,5,6,8,5,6,2,8,9,5,9,4,2,8,8,4,5,1,4,9,6,8,2,8,8,0,5,8,6,6,9,3,9,5,2,3,3,4,1,8,0,5,0,8,7,0,1,4,2,0,0,0,7,0,2,1,1,3,4,5,3,8,1,9,1,7,9,1,7,9,5,9,0,2,1,6,7,0,8,0,2,8,8,5,2,2,6,8,7,8,2,9,8,7,4,6,4,6,8,6,3,5,4,8,3,3,4,1,9,7,2,2,9,9,3,0,4,3,0,1,0,2,3,2,3,5,6,1,2,9,0,1,3,5,1,9,8,7,5,4,2,6,4,7,8,9,1,3,4,2,2,6,3,2,3,2,9,8,6,4,1,0,6,7,7,9,7,5,9,5,7,8,0,0,9,0,0,9,6,7,9,8,1,2,7,3,2,6,9,0,2,8,1,6,2,1,2,9,3,1,8,0,2,7,3,0,2,2,9,9,3,8,0,4,7,1,9,3,7,4,3,5,1,1,8,7,3,4,9,4,8,9,3,6,7,0,4,7,9,2,2,0,6,5,3,0,2,8,1,0,8,7,2,6,7,3,2,0,3,2,7,8,9,1,9,3,8,0,1,7,3,7,6,4,2,9,8,1,6,3,7,7,0,3,5,1,7,1,3,5,0,6,7,5,2,9,9,6,7,4,1,0,8,3,0,3,5,7,1,1,3,8,5,3,7,2,2,8,8,1,3,6,9,4,3,5,5,1,4,1,9,9,6,3,6,9,8,9,5,6,4,7,2,5,8,7,7,7,0,0,1,1,6,5,8,4,1,3,8,4,5,1,4,0,7,0,3,8,1,5,8,3,3,5,6,5,9,7,8,2,3,5,9,6,9,1,4,4,0,1,0,2,9,3,4,3,6,4,6,2,5,6,2,0,7,2,0,8,2,0,5,6,8,7,9,7,0,6,3,4,5,6,6,7,2,9,3,6,9,0,7,9,1,3,0,0,1,3,7,5,2,9,8,4,4,4,6,8,0,6,7,4,6,4,9,2,0,8,5,7,4,7,0,0,2,8,8,0,4,9,8,3,6,0,0,1,0,8,5,8,2,5,0,1,9,3,6,6,2,1,7,3,4,1,2,9,6,0,9,8,9,1,7,3,8,9,7,4,8,8,7,9,9,3,2,5,1,1,4,5,6,5,1,5,8,4,3,5,3,7,3,3,4,9,3,8,3,9,7,4,6,8,7,2,9,5,5,3,8,1,4,7,6,7,8,7,0,3,1,4,1,5,8,0,0,3,2,8,9,9,2,9,2,1,6,6,3,5,0,8,3,0,7,1,9,9,7,4,7,0,5,6,4,5,5,8,4,4,2,4,2,9,0,0,9,6,2,1,9,8,0,8,6,2,0,0,7,4,0,9,7,6,0,2,2,6,3,7,3,0,6,7,1,3,6,2,4,3,5,3,1,5,8,0,7,0,3,4,7,2,6,5,9,7,1,4,4,9,8,2,4,5,3,0,2,9,6,1,3,3,3,5,6,9,6,1,2,5,3,0,2,9,3,0,7,5,3,3,0,1,0,0,9,4,6,4,4,9,8,6,0,0,3,6,5,6,1,6,3,3,8,2,5,0,0,7,5,1,1,7,0,5,5,0,1,0,7,1,4,1,0,3,5,9,1,9,0,3,5,4,3,7,8,4,9,6,8,4,0,5,1,9,7,4,8,5,1,1,8,8,7,1,0,3,5,9,3,2,1,0,9,6,4,2,7,5,7,1,4,8,9,0,0,7,1,2,6,4,7,4,2,3,7,5,7,8,1,8,9,3,1,9,6,3,9,8,4,2,4,8,7,4,5,0,7,1,2,0,1,6,2,6,8,5,3,7,0,4,2,9,5,3,7,1,4,6,8,8,2,9,9,4,7,7,5,0,0,3,9,0,3,0,8,5,5,1,9,7,3,1,4,7,8,5,7,5,8,8,0,6,6,9,7,7,6,3,7,0,6,5,9,9,7,0,7,2,3,8,7,6,1,8,7,3,7,3,2,2,4,2,2,4,7,5,4,2,1,3,9,4,4,5,0,2,1,5,0,0,5,7,5,5,2,7,8,7,7,4,7,0,9,8,9,4,1,7,6,1,4,6,0,8,9,2,6,7,9,3,2,8,0,5,4,6,9,2,8,3,0,4,0,8,0,9,9,3,0,2,9,5,4,2,2,0,0,0,5,3,8,2,8,0,5,3,1,6,4,3,9,7,9,8,1,0,8,5,2,6,9,9,6,4,5,2,3,8,5,5,3,3,2,9,4,3,9,4,2,7,9,2,5,6,7,4,0,9,2,2,2,7,3,7,3,3,6,5,6,7,5,2,7,0,9,1,2,3,3,0,1,5,3,2,3,7,6,6,1,3,1,3,0,5,4,0,3,0,4,8,0,0,1,9,7,2,4,9,5,2,1,7,0,5,2,1,6,0,5,2,8,7,9,9,9,0,8,1,8,9,9,8,5,2,7,4,5,2,3,6,0,4,6,4,3,5,8,7,4,3,0,1,9,1,1,2,8,8,8,3,1,0,9,4,3,7,2,3,6,7,4,8,6,5,7,3,0,7,7,0,3,0,8,5,4,1,9,5,7,2,3,2,2,4,5,9,4,9,7,0,4,6,4,3,8,2,1,9,2,7,3,1,3,7,1,7,5,9,5,6,7,8,5,4,1,3,5,2,9,7,0,0,8,8,8,4,7,1,0,9,2,7,1,0,6,2,2,7,6,6,3,1,8,8,7,3,8,4,6,4,8,7,7,3,4,0,2,9,1,3,0,9,0,7,0,5,8,3,7,5,2,7,5,5,0,0,7,3,1,2,2,4,9,0,3,7,7,5,4,7,4,7,3,4,7,0,9,2,3,7,7,2,8,0,4,1,2,3,1,1,9,3,5,4,7,9,6,6,8,7,3,7,4,2,4,5,2,4,0,5,5,0,8,2,8,6,7,5,0,7,2,9,5,6,6,9,9,7,8,7,3,0,2,2,6,2,3,0,3,1,7,9,0,1,4,7,5,8,9,4,5,8,8,7,5,0,6,5,9,1,6,8,5,7,9,5,4,6,7,6,7,6,1,3,4,0,2,5,6,8,1,7,0,4,9,8,4,1,4,6,1,0,9,0,5,1,5,9,5,7,8,1,3,1,7,7,1,6,0,9,1,8,4,4,9,8,9,8,6,9,4,2,3,8,3,0,9,7,5,1,4,1,7,1,6,7,4,9,4,3,6,2,3,9,5,5,4,2,1,5,6,8,8,3,3,8,2,2,7,5,1,0,9,2,2,8,6,7,0,4,6,4,6,2,3,6,0,2,1,5,7,8,4,9,7,2,2,7,0,6,0,5,8,6,9,1,7,8,7,6,7,9,2,4,7,4,4,2,6,7,8,1,0,1,2,1,7,9,8,5,0,3,1,4,3,6,9,4,0,0,3,5,5,4,4,7,8,8,8,9,5,7,5,1,1,5,0,2,2,9,8,4,2,4,5,7,2,3,6,5,1,6,0,2,4,7,1,8,6,1,7,6,3,0,0,5,4,5,9,4,6,5,1,1,3,8,0,3,9,9,0,5,9,3,7,0,5,2,5,7,7,9,7,6,1,6,7,1,1,1,1,9,3,3,8,7,7,6,9,2,9,9,9,0,7,0,9,3,8,5,0,7,9,0,1,6,5,3,4,8,2,5,9,9,5,9,5,2,1,4,1,6,7,7,5,6,7,6,9,3,6,3,7,2,0,9,5,1,8,5,2,8,1,8,8,8,2,8,5,8,3,5,9,5,3,2,2,9,7,5,1,3,1,0,9,3,8,0,9,1,1,3,4,8,2,8,6,9,3,2,5,5,1,7,6,0,3,0,8,1,3,9,4,6,1,3,9,0,2,2,4,0,7,0,4,7,7,8,7,9,2,4,0,4,7,4,8,2,1,0,2,7,8,0,9,4,5,8,2,2,0,1,3,0,8,5,5,8,0,8,2,7,4,7,8,1,8,4,8,4,2,7,8,4,4,8,0,2,2,5,6,7,1,0,7,3,6,3,6,7,3,6,2,5,0,6,4,0,6,4,5,5,4,0,9,3,9,2,9,6,9,5,2,0,4,9,5,7,6,8,0,8,5,5,0,2,4,5,0,7,5,5,4,2,2,0,2,3,4,9,9,4,0,8,4,9,6,2,9,8,9,5,6,7,0,2,1,7,5,7,9,7,3,6,6,3,6,0,2,0,1,7,7,4,1,4,2,9,3,3,5,2,5,8,7,4,7,8,8,3,6,5,6,5,3,4,4,5,1,5,3,0,5,6,2,8,4,1,1,2,8,0,4,7,0,9,9,6,7,9,2,6,1,6,7,9,8,7,8,2,1,6,7,7,9,1,2,3,1,9,1,3,6,1,5,3,5,8,0,9,6,6,3,8,1,3,1,8,6,2,6,9,6,7,3,6,4,2,3,2,6,7,2,9,3,0,8,3,9,0,3,0,7,6,1,0,4,9,8,0,0,9,9,5,0,4,2,6,4,2,8,3,0,7,8,1,8,5,4,8,5,6,5,7,4,0,6,6,6,7,6,4,4,7,6,5,3,3,7,5,0,1,8,7,8,5,0,5,3,8,4,5,6,1,2,7,2,7,6,4,8,5,5,0,5,9,2,4,6,7,8,2,9,4,6,6,4,6,6,4,0,8,0,7,1,8,6,4,9,5,3,5,1,9,6,7,7,3,4,5,7,6,5,2,3,9,9,6,3,4,6,3,6,4,9,0,3,3,6,6,0,6,3,3,4,0,1,0,2,1,2,8,8,8,2,1,7,6,2,6,7,4,6,9,8,8,8,9,2,5,7,0,2,7,4,6,9,0,1,6,8,6,3,9,7,1,8,0,8,4,3,5,1,4,0,3,5,0,7,1,1,3,4,0,5,5,8,6,1,1,3,4,4,7,4,2,8,1,9,6,5,0,0,5,0,7,2,2,2,3,2,0,8,2,2,3,0,6,4,4,1,2,6,3,0,3,7,8,9,0,0,2,6,2,1,2,5,1,0,7,6,5,7,7,8,9,8,4,5,2,1,1,7,9,0,2,8,8,8,1,2,0,3,7,9,6,2,2,4,3,2,0,7,8,8,0,5,9,1,6,6,9,3,1,6,0,9,3,1,2,4,9,8,8,2,2,2,8,1,8,3,1,9,3,6,4,5,5,8,3,6,4,3,7,7,7,1,6,0,8,6,9,1,7,7,0,1,0,4,1,9,7,5,3,7,0,3,0,6,5,0,6,5,1,3,7,0,6,7,7,8,8,2,0,1,8,0,0,2,5,2,9,3,0,8,8,4,8,9,1,7,3,4,2,3,4,6,4,1,9,2,5,5,3,0,8,1,6,5,2,9,4,3,1,6,7,0,0,9,1,2,6,6,5,1,7,4,0,6,9,9,7,8,3,7,9,5,7,6,4,7,0,1,4,2,4,1,4,8,2,5,6,1,8,6,4,8,9,6,5,4,0,5,1,7,0,8,7,1,5,0,0,3,6,0,6,8,3,3,1,6,7,0,9,7,0,9,1,8,7,0,8,4,1,4,7,0,0,4,7,4,9,3,7,1,3,3,7,5,2,7,8,9,7,1,7,9,6,7,5,8,1,4,2,6,5,8,2,7,6,0,2,7,8,5,2,3,8,4,8,4,3,3,6,3,2,2,5,4,9,6,2,6,0,4,8,9,7,5,1,2,5,6,6,8,8,2,7,1,8,3,1,2,6,4,2,6,3,4,6,5,8,3,3,7,5,0,9,6,5,3,8,4,3,5,7,1,5,6,2,9,4,0,7,1,0,6,9,4,3,9,2,3,5,9,9,4,4,1,9,0,9,4,7,5,1,8,6,1,8,4,5,6,5,8,2,0,1,6,7,4,6,8,4,4,2,5,4,3,6,3,9,1,5,7,2,4,6,1,5,7,2,1,1,0,7,0,0,4,9,0,4,4,2,2,8,9,9,1,1,4,3,5,9,3,6,0,6,3,3,7,7,3,6,1,6,3,6,0,4,2,6,7,8,7,5,0,4,7,7,4,6,7,6,3,4,8,3,2,9,5,5,8,0,9,3,3,7,7,1,6,3,6,4,7,0,1,7,7,2,7,3,0,9,8,1,4,0,3,6,7,0,0,6,9,9,5,8,5,2,5,8,2,3,6,7,3,5,8,7,0,1,9,8,6,7,1,2,1,5,0,2,8,2,6,9,5,2,2,7,4,6,5,4,7,4,3,7,3,3,8,6,7,3,2,5,4,1,6,4,6,9,9,4,2,4,5,7,7,0,7,9,9,0,1,5,0,7,2,6,0,0,4,5,9,1,1,3,9,4,1,5,1,4,3,5,1,9,5,4,9,7,6,3,5,5,4,2,0,4,5,1,1,8,3,2,7,5,7,1,8,6,0,0,7,8,8,1,3,7,2,9,6,7,8,7,5,7,5,1,6,5,1,0,7,1,9,7,2,9,1,8,3,2,3,5,1,6,5,5,9,4,4,4,5,7,0,8,0,1,3,4,9,9,3,8,9,0,5,4,0,5,3,2,9,0,5,1,4,9,6,2,3,0,7,5,1,0,3,7,3,5,9,9,4,6,4,6,6,4,7,4,7,9,2,3,3,8,1,6,0,9,1,5,7,7,6,7,1,2,9,5,8,5,3,1,2,3,7,7,0,5,9,6,2,5,5,4,8,1,1,5,4,0,9,3,7,7,2,8,9,6,6,9,6,2,3,3,4,8,4,2,4,0,5,8,8,4,1,0,9,8,5,6,6,5,9,5,2,5,2,9,5,2,6,9,2,5,2,3,0,9,8,6,8,8,6,5,6,0,3,8,5,7,6,5,4,8,0,1,6,9,8,9,8,3,5,3,7,5,4,7,3,3,2,4,9,5,4,0,8,3,4,7,4,0,6,6,4,4,2,8,3,9,4,7,6,0,0,2,3,0,1,3,1,2,0,9,6,3,9,6,7,1,7,9,5,2,7,5,2,9,7,0,9,1,4,9,2,9,1,5,5,4,4,4,1,7,5,5,8,9,0,6,7,4,6,7,1,5,8,1,3,0,2,2,3,7,8,8,3,9,1,3,9,7,7,1,3,3,0,8,4,0,7,4,3,3,5,1,4,8,4,9,9,1,9,0,5,1,2,6,3,9,8,1,5,8,7,1,1,2,5,2,7,7,6,7,2,4,0,7,3,5,1,3,4,7,8,1,2,9,1,9,5,4,4,3,8,1,3,0,2,5,5,3,4,3,4,4,0,4,9,9,5,8,4,9,9,3,8,1,3,8,8,2,5,0,1,1,1,3,9,1,6,4,3,8,7,8,6,1,0,7,2,5,1,3,3,3,0,5,9,2,9,0,8,1,8,4,6,4,5,6,4,1,7,8,5,4,5,0,3,7,0,4,8,2,5,7,8,1,5,0,5,7,5,6,1,3,9,0,2,9,9,5,1,9,2,0,8,4,7,0,8,6,2,5,7,4,9,1,4,2,7,0,5,6,3,4,9,5,1,0,2,6,7,2,1,8,4,1,4,3,2,1,5,1,7,6,7,6,6,9,4,0,0,2,1,7,8,6,5,0,6,2,4,7,8,1,4,8,2,4,7,0,0,0,6,4,4,4,5,9,0,0,0,7,0,0,4,6,6,0,6,9,3,8,6,6,5,6,8,5,3,6,1,8,3,5,0,7,8,8,1,6,3,1,9,5,0,9,9,0,0,4,7,2,9,3,1,8,4,3,6,9,9,4,4,3,8,6,0,7,4,4,5,2,4,0,1,6,9,2,1,9,8,5,9,7,3,4,0,1,9,8,9,6,2,3,1,4,0,2,4,6,2,4,6,2,1,3,2,7,4,2,3,8,4,1,4,5,4,7,7,9,5,3,3,6,9,2,6,7,2,3,0,2,7,0,8,2,5,3,7,4,0,2,8,2,4,3,9,4,6,8,8,4,4,1,3,4,7,9,6,5,6,5,9,0,9,5,2,2,0,8,8,4,7,0,5,7,5,2,9,5,9,9,0,9,4,9,4,4,0,0,0,2,7,8,2,6,7,3,5,1,4,2,3,2,4,3,1,6,7,1,3,1,4,1,8,5,7,3,4,8,9,9,3,1,8,9,3,4,9,0,6,7,0,5,8,7,5,8,4,8,2,3,1,1,6,5,9,0,7,5,7,9,4,9,9,6,2,1,3,0,4,9,0,6,1,7,9,4,7,5,6,6,9,7,5,6,5,3,3,4,0,0,9,8,1,6,7,9,6,1,9,0,1,7,7,1,9,6,6,0,9,7,1,2,7,9,9,3,7,8,0,3,1,3,0,1,4,5,0,6,4,3,1,3,6,3,8,9,4,8,5,4,6,8,8,5,0,3,3,2,0,5,8,0,3,3,6,4,3,5,8,2,8,4,2,7,6,6,8,3,1,1,5,7,4,1,1,3,6,9,6,9,2,7,7,0,3,7,8,4,2,3,2,7,0,2,7,2,8,7,5,5,1,4,3,5,4,9,8,2,7,8,7,7,2,2,3,3,2,0,4,3,9,4,9,4,1,5,8,1,3,9,9,4,5,1,8,3,8,3,1,5,4,9,8,0,9,5,9,9,4,1,8,4,1,1,4,8,8,5,6,3,8,7,4,7,3,5,5,6,5,7,7,6,4,8,1,3,8,1,9,9,0,3,3,2,1,7,7,9,1,9,6,0,4,7,6,0,3,8,4,8,3,0,0,5,8,9,4,5,2,0,1,9,2,3,1,0,5,1,9,2,9,5,1,9,0,4,9,8,2,7,3,8,7,5,5,5,7,3,1,9,9]))
from utils import TreeNode class Solution(object): def kthSmallest(self, root, k): """ :type root: TreeNode :type k: int :rtype: int """ parent_stack = [] node = root count = 0 while parent_stack or node: if node: parent_stack.append(node) node = node.left else: node = parent_stack.pop() count += 1 if count == k: return node.val node = node.right if __name__ == '__main__': print Solution().kthSmallest(TreeNode.build_by_level_order([2, 1, 3]), 2) print Solution().kthSmallest(TreeNode.build_by_level_order([2, 1, 3]), 4) print Solution().kthSmallest(None, 2) print Solution().kthSmallest(None, 4) print Solution().kthSmallest(None, 4)
elif root.left is None: return min_depth(root.right, level + 1) elif root.right is None: return min_depth(root.left, level + 1) else: return min([ min_depth(root.left, level + 1), min_depth(root.right, level + 1) ]) return min_depth(root, 1) if root else 0 if __name__ == '__main__': print Solution().minDepth( TreeNode.build_by_level_order([1, 2, 2, 3, 4, 4, 3])) print Solution().minDepth(TreeNode.build_by_level_order([1, 2, '#'])) print Solution().minDepth( TreeNode.build_by_level_order([1, 2, 2, '#', 3, '#', 3])) print Solution().minDepth(TreeNode.build_by_level_order([1])) print Solution().minDepth( TreeNode.build_by_level_order([ 6, 82, 82, '#', 53, 53, '#', -58, '#', '#', -58, '#', -85, -85, '#', -9, '#', '#', -9, '#', 48, 48, '#', 33, '#', '#', 33, 81, '#', '#', 81, 5, '#', '#', 5, 61, '#', '#', 61, '#', 9, 9, '#', 91, '#', '#', 91, 72, 7, 7, 72, 89, '#', 94, '#', '#', 94, '#', 89, -27, '#', -30, 36, 36, -30, '#', -27, 50, 36, '#', -80, 34, '#', '#', 34, -80, '#', 36, 50, 18, '#', '#', 91, 77, '#', '#', 95, 95, '#', '#', 77, 91, '#', '#', 18, -19, 65, '#', 94, '#', -53, '#', -29, -29, '#', -53, '#', 94, '#', 65, -19, -62, -15, -35, '#', '#', -19, 43, '#', -21, '#', '#', -21, '#', 43, -19, '#', '#', -35, -15, -62,
from utils import TreeNode class Solution(object): def rightSideView(self, root): """ :type root: TreeNode :rtype: List[int] """ if root is None: return [] current_level = [root] next_level = [] result = [] while current_level: result.append(current_level[-1].val) for node in current_level: next_level.extend( [n for n in [node.left, node.right] if n is not None]) current_level = next_level next_level = [] return result if __name__ == '__main__': print Solution().rightSideView( TreeNode.build_by_level_order([1, 2, 3, '#', 5, '#', 4])) print Solution().rightSideView(TreeNode.build_by_level_order([1])) print Solution().rightSideView(TreeNode.build_by_level_order(None))
def hasPathSum(self, root, sum): """ :type root: TreeNode :type sum: int :rtype: bool """ def path_sum(root, sum, accumulate_sum): assert root is not None accumulate_sum += root.val if root.left is None and root.right is None: return (accumulate_sum == sum) left_result = path_sum(root.left, sum, accumulate_sum) if root.left else False if left_result: return True right_result = path_sum(root.right, sum, accumulate_sum) if root.right else False return left_result or right_result return path_sum(root, sum, 0) if root else False if __name__ == '__main__': t = TreeNode.build_by_level_order([5, 4, 8, 11, '#', 13, 4, 7, 2, '#', '#', '#', 1]) print Solution().hasPathSum(t, 22) print Solution().hasPathSum(t, 15) print Solution().hasPathSum(t, 9) print Solution().hasPathSum(t, 13) print Solution().hasPathSum(t, 16) print Solution().hasPathSum(t, 26) print Solution().hasPathSum(t, 18)
def in_order_tree(node): if node.left: for x in in_order_tree(node.left): yield x yield node.val if node.right: for x in in_order_tree(node.right): yield x if not root: return True old_value = None print list(in_order_tree(root)) for val in in_order_tree(root): if not old_value: old_value = val continue if val <= old_value: return False old_value = val return True if __name__ == '__main__': # print Solution().isValidBST(TreeNode.build_by_level_order([1, '#', 2, 3, '#'])) # print Solution().isValidBST(TreeNode.build_by_level_order([2, 1, 3])) # print Solution().isValidBST(TreeNode.build_by_level_order([])) # print Solution().isValidBST(TreeNode.build_by_level_order([2])) # print Solution().isValidBST(TreeNode.build_by_level_order([10, 5, 15, '#', '#', 6, 20])) # print Solution().isValidBST(TreeNode.build_by_level_order([1, 1, '#'])) # print Solution().isValidBST(TreeNode.build_by_level_order([0])) print Solution().isValidBST(TreeNode.build_by_level_order([0, '#', -1]))
__author__ = 'clp' from utils import TreeNode class Solution(object): def invertTree(self, root): """ :type root: TreeNode :rtype: TreeNode """ def invert_tree(root): if root is None: return None root.left, root.right = root.right, root.left invert_tree(root.left) invert_tree(root.right) if root: invert_tree(root) return root if __name__ == '__main__': TreeNode.print_in_level_order(Solution().invertTree( TreeNode.build_by_level_order([4, 2, 7, 1, '#', 6, 9]))) TreeNode.print_in_level_order(Solution().invertTree( TreeNode.build_by_level_order([])))
class Solution(object): def minDepth(self, root): """ :type root: TreeNode :rtype: int """ def min_depth(root, level): if root.left is None and root.right is None: return level elif root.left is None: return min_depth(root.right, level+1) elif root.right is None: return min_depth(root.left, level+1) else: return min([min_depth(root.left, level+1), min_depth(root.right, level+1)]) return min_depth(root, 1) if root else 0 if __name__ == '__main__': print Solution().minDepth(TreeNode.build_by_level_order([1, 2, 2, 3, 4, 4, 3])) print Solution().minDepth(TreeNode.build_by_level_order([1, 2, '#'])) print Solution().minDepth(TreeNode.build_by_level_order([1, 2, 2, '#', 3, '#', 3])) print Solution().minDepth(TreeNode.build_by_level_order([1])) print Solution().minDepth(TreeNode.build_by_level_order([6,82,82,'#',53,53,'#',-58,'#','#',-58,'#',-85,-85,'#',-9,'#','#',-9,'#',48,48,'#',33,'#','#',33,81,'#','#',81,5,'#','#',5,61,'#','#',61,'#',9,9,'#',91,'#','#',91,72,7,7,72,89,'#',94,'#','#',94,'#',89,-27,'#',-30,36,36,-30,'#',-27,50,36,'#',-80,34,'#','#',34,-80,'#',36,50,18,'#','#',91,77,'#','#',95,95,'#','#',77,91,'#','#',18,-19,65,'#',94,'#',-53,'#',-29,-29,'#',-53,'#',94,'#',65,-19,-62,-15,-35,'#','#',-19,43,'#',-21,'#','#',-21,'#',43,-19,'#','#',-35,-15,-62,86,'#','#',-70,'#',19,'#',55,-79,'#','#',-96,-96,'#','#',-79,55,'#',19,'#',-70,'#','#',86,49,'#',25,'#',-19,'#','#',8,30,'#',82,-47,-47,82,'#',30,8,'#','#',-19,'#',25,'#',49])) print Solution().minDepth(TreeNode.build_by_level_order([2,3,3,4,5,'#',4])) print Solution().minDepth(TreeNode.build_by_level_order([2,3,3,4,5,'#','#'])) print Solution().minDepth(TreeNode.build_by_level_order([2,3,3,4,5,5,4,'#','#',8,9,'#','#',9,8]))
__author__ = 'clp' from utils import TreeNode null = '#' class Solution(object): def isBalanced(self, root): """ :type root: TreeNode :rtype: bool """ def op(root): if root == None: return 0, True left_depth, left_balance = op(root.left) right_depth, right_balance = op(root.right) return max(left_depth, right_depth) + 1, \ (left_balance and right_balance and (-1 <= left_depth - right_depth <= 1)) return op(root)[1] if __name__ == '__main__': print Solution().isBalanced( TreeNode.build_by_level_order([1, 2, 3, 4, null, null, null, 5])) print Solution().isBalanced( TreeNode.build_by_level_order([1, 2, 3, 4, null, null, null]))
__author__ = 'clp' from utils import TreeNode null = '#' class Solution(object): def isBalanced(self, root): """ :type root: TreeNode :rtype: bool """ def op(root): if root == None: return 0, True left_depth, left_balance = op(root.left) right_depth, right_balance = op(root.right) return max(left_depth, right_depth) + 1, \ (left_balance and right_balance and (-1 <= left_depth - right_depth <= 1)) return op(root)[1] if __name__ == '__main__': print Solution().isBalanced(TreeNode.build_by_level_order([1, 2, 3, 4, null, null, null, 5])) print Solution().isBalanced(TreeNode.build_by_level_order([1, 2, 3, 4, null, null, null]))
class Solution(object): def maxDepth(self, root): """ :type root: TreeNode :rtype: int """ if root is None: return 0 return max(self.maxDepth(root.left), self.maxDepth(root.right)) + 1 if __name__ == "__main__": print Solution().maxDepth(TreeNode.build_by_level_order([1, 2, 2, 3, 4, 4, 3])) print Solution().maxDepth(TreeNode.build_by_level_order([1, 2, "#"])) print Solution().maxDepth(TreeNode.build_by_level_order([1, 2, 2, "#", 3, "#", 3])) print Solution().maxDepth(TreeNode.build_by_level_order([1])) print Solution().maxDepth( TreeNode.build_by_level_order( [ 6, 82, 82, "#", 53, 53, "#", -58, "#",
""" :type root: TreeNode :type sum: int :rtype: bool """ def path_sum(root, sum, accumulate_sum): assert root is not None accumulate_sum += root.val if root.left is None and root.right is None: return (accumulate_sum == sum) left_result = path_sum(root.left, sum, accumulate_sum) if root.left else False if left_result: return True right_result = path_sum(root.right, sum, accumulate_sum) if root.right else False return left_result or right_result return path_sum(root, sum, 0) if root else False if __name__ == '__main__': t = TreeNode.build_by_level_order( [5, 4, 8, 11, '#', 13, 4, 7, 2, '#', '#', '#', 1]) print Solution().hasPathSum(t, 22) print Solution().hasPathSum(t, 15) print Solution().hasPathSum(t, 9) print Solution().hasPathSum(t, 13) print Solution().hasPathSum(t, 16) print Solution().hasPathSum(t, 26) print Solution().hasPathSum(t, 18)
for x in in_order_tree(node.left): yield x yield node.val if node.right: for x in in_order_tree(node.right): yield x if not root: return True old_value = None print list(in_order_tree(root)) for val in in_order_tree(root): if not old_value: old_value = val continue if val <= old_value: return False old_value = val return True if __name__ == '__main__': # print Solution().isValidBST(TreeNode.build_by_level_order([1, '#', 2, 3, '#'])) # print Solution().isValidBST(TreeNode.build_by_level_order([2, 1, 3])) # print Solution().isValidBST(TreeNode.build_by_level_order([])) # print Solution().isValidBST(TreeNode.build_by_level_order([2])) # print Solution().isValidBST(TreeNode.build_by_level_order([10, 5, 15, '#', '#', 6, 20])) # print Solution().isValidBST(TreeNode.build_by_level_order([1, 1, '#'])) # print Solution().isValidBST(TreeNode.build_by_level_order([0])) print Solution().isValidBST(TreeNode.build_by_level_order([0, '#', -1]))
""" :type root: TreeNode :rtype: List[List[int]] """ if root is None: return [] current_level = [root] next_level = [] result = [] while current_level: level_value_list = [] for current_node in current_level: level_value_list.append(current_node.val) next_level.append(current_node.left) if current_node.left else None next_level.append(current_node.right) if current_node.right else None current_level = next_level next_level = [] result.append(level_value_list) return result if __name__ == '__main__': t = TreeNode.build_by_level_order([1,2,3,'#','#',4,'#','#',5]) print Solution().levelOrder(t) TreeNode.print_in_level_order(t) t2 = TreeNode.build_by_level_order([3,9,20,'#','#',15,7]) print Solution().levelOrder(t2) t3 = TreeNode.build_by_level_order([3]) print Solution().levelOrder(t3)
""" :type root: TreeNode :rtype: List[List[int]] """ if root is None: return [] current_level = [root] next_level = [] result = [] while current_level: level_value_list = [] for current_node in current_level: level_value_list.append(current_node.val) next_level.append( current_node.left) if current_node.left else None next_level.append( current_node.right) if current_node.right else None current_level = next_level next_level = [] result.append(level_value_list) return result if __name__ == '__main__': t = TreeNode.build_by_level_order([1, 2, 3, '#', '#', 4, '#', '#', 5]) print Solution().levelOrder(t) TreeNode.print_in_level_order(t) t2 = TreeNode.build_by_level_order([3, 9, 20, '#', '#', 15, 7]) print Solution().levelOrder(t2) t3 = TreeNode.build_by_level_order([3]) print Solution().levelOrder(t3)
from utils import TreeNode class Solution(object): def sumNumbers(self, root): """ :type root: TreeNode :rtype: int """ if root is None: return 0 current_level = [(root, 0)] s = 0 while current_level: next_level = [] for node, val in current_level: pivot = val * 10 + node.val if node.left: next_level.append((node.left, pivot)) if node.right: next_level.append((node.right, pivot)) if node.left == node.right == None: s += pivot current_level = next_level return s if __name__ == '__main__': print Solution().sumNumbers(TreeNode.build_by_level_order([1,2,3])) print Solution().sumNumbers(TreeNode.build_by_level_order([1]))
from utils import TreeNode class Solution(object): def rightSideView(self, root): """ :type root: TreeNode :rtype: List[int] """ if root is None: return [] current_level = [root] next_level = [] result = [] while current_level: result.append(current_level[-1].val) for node in current_level: next_level.extend([n for n in [node.left, node.right] if n is not None]) current_level = next_level next_level = [] return result if __name__ == '__main__': print Solution().rightSideView(TreeNode.build_by_level_order([1, 2, 3, '#', 5, '#', 4])) print Solution().rightSideView(TreeNode.build_by_level_order([1])) print Solution().rightSideView(TreeNode.build_by_level_order(None))