from typing import List

from tools import TreeNode

class Solution:
    def largestValues(self, root: TreeNode) -> List[int]:
        if root is None:
            return []
        result = []
        queue = [root]
        while len(queue) > 0:
            maxValue = None
            length = len(queue)
            for i in range(length):
                node = queue.pop(0)
                if maxValue is None or maxValue < node.val:
                    maxValue = node.val
                if node.left is not None:
                    queue.append(node.left)
                if node.right is not None:
                    queue.append(node.right)
            result.append(maxValue)
        return result

print(Solution().largestValues(TreeNode.stringToTreeNode("[1,3,2,5,3,9]")))

Esempio n. 2
0
from tools import TreeNode


class Solution:
    def hasPathSum(self, root: TreeNode, sum: int) -> bool:
        if root is None:
            return False
        return self._addValEqual(root, 0, sum)

    def _addValEqual(self, node, counter, sum):
        if node is None:
            return counter == sum
        counter += node.val
        haveChild = False
        if node.left is not None:
            haveChild = True
            if self._addValEqual(node.left, counter, sum):
                return True
        if node.right is not None:
            haveChild = True
            if self._addValEqual(node.right, counter, sum):
                return True
        return False if haveChild else counter == sum


print(Solution().hasPathSum(TreeNode.stringToTreeNode("[0,1,1]"), 0))
from tools import TreeNode


class Solution:
    def isValidBST(self, root: TreeNode) -> bool:
        if root is None:
            return True
        return self.dfs(root, None) is not None

    def dfs(self, root, before):
        last = None
        if root.left is not None:
            temp = self.dfs(root.left, before)
            if temp is None or temp >= root.val:
                return None
        if before is None or root.val > before:
            last = root.val
        else:
            return None
        if root.right is not None:
            temp = self.dfs(root.right, last)
            if temp is None or temp <= root.val:
                return None
            last = temp
        return last


print(Solution().isValidBST(
    TreeNode.stringToTreeNode("[5,1,4,null,null,3,6]")))
from tools import  TreeNode

class Solution:
    def pruneTree(self, root: TreeNode) -> TreeNode:
        if root is None:
            return None
        self.doPruneTree(root)
        return root

    def doPruneTree(self, root):
        flag = False
        if root.left is not None:
            x = self.doPruneTree(root.left)
            if not x:
                root.left = None
            flag = flag or x
        if root.right is not None:
            x = self.doPruneTree(root.right)
            if not x:
                root.right = None
            flag = flag or x
        return flag or (root.val == 1)

print(TreeNode.treeNodeToString(Solution().pruneTree(TreeNode.stringToTreeNode("[1,null,0,0,1]"))))

Esempio n. 5
0
from typing import List

from tools import TreeNode


class Solution:
    def levelOrder(self, root: TreeNode) -> List[List[int]]:
        if root is None:
            return []
        result = []
        queue = [root]
        while len(queue) > 0:
            length = len(queue)
            temp = [0] * length
            for i in range(length):
                node = queue.pop(0)
                temp[i] = node.val
                if node.left is not None:
                    queue.append(node.left)
                if node.right is not None:
                    queue.append(node.right)
            result.append(temp)
        return result


print(Solution().levelOrder(
    TreeNode.stringToTreeNode("[3,9,20,null,null,15,7]")))
from tools import TreeNode


class Solution:
    def findTilt(self, root: TreeNode) -> int:
        if root is None:
            return 0
        result = [0]
        self.getSum(root, result)
        return result[0]

    def getSum(self, root, num):
        sumLeft = 0
        sumRight = 0
        if root.left is not None:
            sumLeft = self.getSum(root.left, num)
        if root.right is not None:
            sumRight = self.getSum(root.right, num)
        num[0] = num[0] + abs(sumLeft - sumRight)
        return sumLeft + sumRight + root.val


root = TreeNode.stringToTreeNode("[1,2,3]")

print(Solution().findTilt(root))