sys.path.append("..") from typing import Optional from utils import TreeNode class Solution: def diameterOfBinaryTree(self, root: Optional[TreeNode]) -> int: paths = [0] def helper(node): if not (node.left or node.right): return 0 lh = helper(node.left) + 1 if node.left else 0 rh = helper(node.right) + 1 if node.right else 0 paths[0] = max(paths[0], lh + rh) return max(lh, rh) helper(root) return paths[0] if __name__ == '__main__': s = Solution() print(s.diameterOfBinaryTree(TreeNode.from_list([1, 2, 3, 4, 5])))
from typing import List, Optional from utils import TreeNode class Solution: def rightSideView(self, root: Optional[TreeNode]) -> List[int]: if not root: return [] queue = [(0, root)] nodes = {} while queue: level, node = queue.pop() nodes[level] = node.val if node.left: queue.insert(0, (level + 1, node.left)) if node.right: queue.insert(0, (level + 1, node.right)) return list(nodes.values()) if __name__ == '__main__': s = Solution() root = TreeNode.from_list([1, 2, 3, None, 5, None, 4]) print(s.rightSideView(root))
class Solution: def deleteNode(self, root: Optional[TreeNode], key: int) -> Optional[TreeNode]: if not root: return None if key < root.val: root.left = self.deleteNode(root.left, key) elif key > root.val: root.right = self.deleteNode(root.right, key) else: if not root.left: return root.right if not root.right: return root.left rightSmallest = root.right while rightSmallest.left: rightSmallest = rightSmallest.left rightSmallest.left = root.left return root.right return root if __name__ == '__main__': s = Solution() root = TreeNode.from_list([5, 3, 6, 2, 4, None, 7]) ans = s.deleteNode(root, 3) print(ans.to_list())