if curr.left: sums[curr.left] = curr_sum + curr.left.val queue.append(curr.left) maxSum = max(maxSum, sums[curr.left]) if curr.right: sums[curr.right] = curr_sum + curr.right.val queue.append(curr.right) maxSum = max(maxSum, sums[curr.right]) del(sums[curr]) return maxSum root = TreeNode(1) root.left = TreeNode(2) root.left.left = TreeNode(3) root.left.right = TreeNode(4) root.left.right.left = TreeNode(10) root.left.right.right = TreeNode(7) root.left.left.left = TreeNode(9) root.left.left.right = TreeNode(8) root.right = TreeNode(5) root.right.right = TreeNode(6) print root.print_tree(root) print '----------------' s = Solution() print s.maxPathSum(root)