# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None


class Solution(object):
    def diameterOfBinaryTree(self, root):
        """
		:type root: TreeNode
		:rtype: int
		"""
        def helper(root):
            if not root:
                return 0, 0

            lr, ll = helper(root.left)
            rr, rl = helper(root.right)
            return max(lr, rr, ll + rl), max(ll, rl) + 1

        return helper(root)[0]


import utils
t = utils.maketree([1, 2, 3, 4, 5])
print Solution().diameterOfBinaryTree(t)
Exemplo n.º 2
0
#         self.left = None
#         self.right = None


class Solution(object):
    def __init__(self):
        self.res = float('-inf')

    def maxPathSum(self, root):
        """
		:type root: TreeNode
		:rtype: int
		"""
        if not root: return 0

        def maxPathSumHelper(root):
            if not root: return float('-inf')

            lm = max(0, maxPathSumHelper(root.left))
            rm = max(0, maxPathSumHelper(root.right))

            self.res = max(self.res, root.val + lm + rm)
            return max(root.val + lm, root.val + rm)

        maxPathSumHelper(root)
        return self.res


import utils
print Solution().maxPathSum(utils.maketree([2, 1, 3]))
#         self.val = x
#         self.left = None
#         self.right = None

class Solution(object):
	def kthSmallest(self, root, k):
		"""
		:type root: TreeNode
		:type k: int
		:rtype: int
		"""
		def kthSmallestHelper(root, k):
			# print 'kthSmallestHelper', root, root.val if root else -1, k
			if not root:
				return None, 0
			val, leftsize = kthSmallestHelper(root.left, k)
			# print 'k', k, 'val', val
			if val is not None:
				return val, 0
			if leftsize == k-1:
				return root.val, 0
			else:
				val, rightsize = kthSmallestHelper(root.right, k - leftsize - 1)
				if val is not None: return val, 0
				else: return None, leftsize+1+rightsize

		return kthSmallestHelper(root, k)[0]

import utils
print Solution().kthSmallest(utils.maketree([2,1]), 2)
Exemplo n.º 4
0
#         self.val = x
#         self.left = None
#         self.right = None

class Solution(object):
	def postorderTraversal(self, root):
		"""
		:type root: TreeNode
		:rtype: List[int]
		"""
		if not root: return []

		stack = []
		stack.append((1, root))
		postorder = []
		while stack:
			op, root = stack.pop()
			if op == 1:
				stack.append((2, root))
				if root.right:
					stack.append((1, root.right))
				if root.left:
					stack.append((1, root.left))
			else:
				postorder.append(root.val)
		return postorder

import utils
print Solution().postorderTraversal(utils.maketree([1,None,2,3]))

Exemplo n.º 5
0
#         self.val = x
#         self.left = None
#         self.right = None


class Solution:
    # @param root, a tree node
    # @return a boolean
    def isSymmetric(self, root):
        if root is None: return True

        return self.solve(root.left, root.right)

    def solve(self, left, right):
        if left is None and right is None:
            return True

        if left is None or right is None:
            return False

        if left.val != right.val:
            return False

        return self.solve(left.left, right.right) and self.solve(
            left.right, right.left)


import utils as u

print Solution().isSymmetric(u.maketree([1, 2, 2, 3, 4, 4, 3]))
print Solution().isSymmetric(u.maketree([1, 2, 2, None, 3, None, 3]))
Exemplo n.º 6
0
	while q:
		qsize = len(q)
		head = tail = ListNode(None)
		for i in xrange(qsize):
			treenode = q.popleft()
			node = ListNode(treenode.val)
			tail.next = node
			tail = node

			if treenode.left: q.append(treenode.left)
			if treenode.right: q.append(treenode.right)

		linkedLists.append(head.next)

	return linkedLists




import utils

#   5
#  4  7
# 3   6 8
root = utils.maketree([1, 2, 2, None, 3, None, 3])
utils.printtree(root)
lists = getLevels(root)
for l in lists:
	utils.printlist(l )

Exemplo n.º 7
0
from collections import Counter
class Solution(object):
	def findFrequentTreeSum(self, root):
		"""
		:type root: TreeNode
		:rtype: List[int]
		"""
		if not root: return []
		sums = Counter()
		def postorder(root):
			ls, rs = 0, 0
			if root.left:
				ls = postorder(root.left)
			if root.right:
				rs = postorder(root.right)

			# visit root now
			s = root.val + ls + rs
			sums[s] += 1
			return s


		postorder(root)
		maxSumCount = max(sums.itervalues())
		return [s for s, c in sums.iteritems() if c == maxSumCount]

import utils
print Solution().findFrequentTreeSum(utils.maketree([5, 2, -3]))

                ll, lr = None, None

            if root.right:
                rl, rr = root.right.left, root.right.right
            else:
                rl, rr = None, None

            l, r = root.left, root.right
            c = min(min(l._c, l._noc) if l else 0, (min(ll._c, ll._noc) if ll else 0) + (min(lr._c, lr._noc) if lr else 0)) + \
                min(min(r._c, r._noc) if r else 0, (min(rl._c, rl._noc) if rl else 0) + (min(rr._c, rr._noc) if rr else 0)) + 1

            if not l and not r:
                noc = INF
            elif not l:  # must r
                noc = r._c
            elif not r:  # must l
                noc = l._c
            else:  # must l and r
                noc = min(l._c + min(r._c, r._noc), r._c + min(l._c, l._noc))

            root._c, root._noc = c, noc

        solve(root)
        return min(root._c, root._noc)


import utils
null = None
root = utils.maketree(
    [0, null, 0, null, 0, null, 0, null, 0, 0, 0, null, null, 0, 0])
print Solution().minCameraCover(root)
# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None


class Solution(object):
    def invertTree(self, root):
        """
        :type root: TreeNode
        :rtype: TreeNode
        """
        if not root: return root
        root.right, root.left = self.invertTree(root.left), self.invertTree(
            root.right)
        return root


import utils
t = utils.maketree([1, 2, 7, 1, 3, 6, 9])
utils.printtree(t)
t = Solution().invertTree(t)
utils.printtree(t)
			root.left = self.deleteNode(root.left, key)
		elif key > root.val:
			root.right = self.deleteNode(root.right, key)
		else: # root.val == key, removing root ...
			if root.left is None:
				root = root.right 
			elif root.right is None:
				root = root.left 
			else: # both left and right is non-empty
				root.val = self.deleteLeftMostNode(root.right, root)
				print 'delete', root.val 
		return root 

	def deleteLeftMostNode(self, root, parent):
		node = root
		isParentLeft = False
		while node.left:
			parent = node 
			node = node.left 
			isParentLeft = True

		if isParentLeft:
			parent.left = node.right
		else:
			parent.right = node.right 
		return node.val 


from utils import printtree, maketree
printtree(Solution().deleteNode(maketree([5,3,6,2,4,None,7]), 3))
Exemplo n.º 11
0
#         self.val = x
#         self.left = None
#         self.right = None


class Solution(object):
    def __init__(self):
        self.sum = 0

    def convertBST(self, root):
        """
		:type root: TreeNode
		:rtype: TreeNode
		"""
        def revorder(root):
            if not root: return

            revorder(root.right)
            # handle root here
            # print self.sum, root.val
            self.sum = root.val = self.sum + root.val

            revorder(root.left)

        revorder(root)
        return root


import utils
utils.printtree(Solution().convertBST(utils.maketree([5, 2, 13])))
Exemplo n.º 12
0
            if node.left:
                postorder(node.left)
            if node.right:
                postorder(node.right)

            node._sum = (node.left._sum if node.left else
                         0) + node.val + (node.right._sum if node.right else 0)
            node._size = (node.left._size if node.left else
                          0) + 1 + (node.right._size if node.right else 0)

        postorder(root)
        return self.solve(root)

    def solve(self, root):
        ret = 0

        if root.left:
            ret += self.solve(root.left)
            lsize, lsum = root.left._size, root.left._sum
            ret += abs(lsum - lsize)

        if root.right:
            ret += self.solve(root.right)
            rsize, rsum = root.right._size, root.right._sum
            ret += abs(rsum - rsize)
        return ret


import utils
print Solution().distributeCoins(utils.maketree([3, 0, 0]))
    def rob(self, root):
        """
		:type root: TreeNode
		:rtype: int
		"""
        return self.solve(root, False)

    def solve(self, root, isParentRobed):
        if not root: return 0
        if isParentRobed:
            if hasattr(root, 'v1'): return root.v1
        else:
            if hasattr(root, 'v2'): return root.v2

        if isParentRobed:
            ret = self.solve(root.left, False) + self.solve(root.right, False)
            root.v1 = ret
        else:
            v1 = self.solve(root.left, False) + self.solve(root.right, False)
            v2 = root.val + self.solve(root.left, True) + self.solve(
                root.right, True)
            ret = max(v1, v2)
            root.v2 = ret

        return ret


print Solution().rob(utils.maketree([3, 2, 3, None, 3, None, 1]))
print Solution().rob(utils.maketree([3, 4, 5, 1, 3, None, 1]))
# utils.printtree(utils.maketree( [3, 4, 5, 1, 3, None, 1] ))
Exemplo n.º 14
0
			h.update(lh+str(root.val)+rh)
			root.hash = h.digest()
			# print root.hash
			return root.hash

		makehash(s)
		makehash(t)
		def isEqual(t1, t2):
			if not t1 and not t2:
				return True
			elif not t1 or not t2:
				return False
			else:
				return t1.hash == t2.hash

		if isEqual(s, t): return True
		return s is not None and (self.isSubtree(s.left, t) or self.isSubtree(s.right, t))




import utils
null = None
s = utils.maketree(
[1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,2]
)
t = utils.maketree([1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,null,1,2]
                   )
utils.printtree(s)
utils.printtree(t)
print Solution().isSubtree(s, t)
Exemplo n.º 15
0
            self.stk.pop()  # pop cur

            while True:
                if not self.stk:
                    parent = None
                    break

                parent = self.stk[-1]
                if parent.left == cur:
                    break

                cur = parent
                self.stk.pop()

            # found parent with parent.left == cur
            cur = parent

        self.cur = cur
        if self.stk:
            assert self.cur == self.stk[-1]
        else:
            assert self.cur is None

        # print 'movetonext', cur


import utils
t = utils.maketree([1, None, 2])
it = BSTIterator(t)
while it.hasNext():
    print it.next()
Exemplo n.º 16
0
		:type sum: int
		:rtype: int
		"""
        return self.pathSumHelper(root, sum, False)

    def pathSumHelper(self, root, sum, pathStarted):
        if not root:
            return 0

        n = 0
        if root.val == sum:
            # print root.val, sum
            n += 1

        if root.left:
            n += self.pathSumHelper(root.left, sum - root.val, True)
            if not pathStarted:
                n += self.pathSumHelper(root.left, sum, False)
        if root.right:
            n += self.pathSumHelper(root.right, sum - root.val, True)
            if not pathStarted:
                n += self.pathSumHelper(root.right, sum, False)

        return n


import utils

t = utils.maketree([10, 5, -3, 3, 2, None, 11, 3, -2, None, 1])
print Solution().pathSum(t, 8)
Exemplo n.º 17
0
    # @param root, a tree node
    # @return an integer
    def maxPathSum(self, root):
        if root is None: return 0
        return self.solve(root)[0]

    def solve(self, root):
        if root.left is None and root.right is None:
            return root.val, root.val

        if root.right is None:
            LS = self.solve(root.left)
            maxsum = max(LS[0], LS[1] + root.val, root.val)
            tothis = max(root.val + LS[1], root.val)
        elif root.left is None:
            RS = self.solve(root.right)
            maxsum = max(RS[0], RS[1] + root.val, root.val)
            tothis = max(root.val + RS[1], root.val)
        else:
            LS = self.solve(root.left)
            RS = self.solve(root.right)
            maxsum = max(LS[0], RS[0], LS[1] + RS[1] + root.val,
                         LS[1] + root.val, RS[1] + root.val, root.val)
            tothis = max(root.val + max(LS[1], RS[1]), root.val)


#         print maxsum, tothis
        return maxsum, tothis

print Solution().maxPathSum(u.maketree([2, -1]))