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]")))
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]"))))
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))