示例#1
0
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))
示例#3
0
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())