コード例 #1
0

class Solution:
    def increasingBST(self, root: TreeNode) -> TreeNode:
        ans, curr = None, None

        def traverse(tree):
            nonlocal ans, curr
            if not tree:
                return
            traverse(tree.left)
            if ans:
                curr.right = TreeNode(tree.val)
                curr = curr.right
            else:
                ans = curr = TreeNode(tree.val)
            traverse(tree.right)

        traverse(root)
        return ans


# [1, null, 2, null, 3, null, 4, null, 5, null, 6, null, 7, null, 8, null, 9]
print(
    serializeTree(Solution().increasingBST(
        deserializeTree(
            "[5, 3, 6, 2, 4, null, 8, 1, null, null, null, 7, 9]"))))

# [1, null, 5, null, 7]
print(serializeTree(Solution().increasingBST(deserializeTree("[5, 1, 7]"))))
コード例 #2
0
            return root
        if root.val == key:
            if not root.left:
                return root.right
            elif not root.right:
                return root.left
            else:
                # Find successor
                succ = root.right
                while succ and succ.left:
                    succ = succ.left
                root.val = succ.val
                root.right = self.deleteNode(root.right, succ.val)
        elif key < root.val:
            root.left = self.deleteNode(root.left, key)
        else:
            root.right = self.deleteNode(root.right, key)
        return root

# "[5, 4, 6, 2, null, null, 7]"
print(serializeTree(Solution().deleteNode(deserializeTree("[5, 3, 6, 2, 4, null, 7]"), 3)))

# "[5, 3, 6, 2, 4, null, 7]"
print(serializeTree(Solution().deleteNode(deserializeTree("[5, 3, 6, 2, 4, null, 7]"), 0)))

# "[]"
print(serializeTree(Solution().deleteNode(deserializeTree("[]"), 0)))

# "[6, 3, 7, 2, 4]"
print(serializeTree(Solution().deleteNode(deserializeTree("[5, 3, 6, 2, 4, null, 7]"), 5)))
コード例 #3
0
import sys
sys.path = ['.', '../', '../../'] + sys.path

from util import TreeNode, deserializeTree, serializeTree


class Solution:
    def addOneRow(self, root: TreeNode, val: int, depth: int) -> TreeNode:
        dummy = TreeNode(0, root)
        row = [dummy]
        for _ in range(depth - 1):
            row = [
                child for node in row for child in [node.left, node.right]
                if child
            ]
        for node in row:
            node.left = TreeNode(val, node.left, None)
            node.right = TreeNode(val, None, node.right)
        return dummy.left


# [4, 1, 1, 2, null, null, 6, 3, 1, 5]
print(
    serializeTree(Solution().addOneRow(deserializeTree("[4, 2, 6, 3, 1, 5]"),
                                       1, 2)))

# [4, 2, null, 1, 1, 3, null, null, 1]
print(
    serializeTree(Solution().addOneRow(deserializeTree("[4, 2, null, 3, 1]"),
                                       1, 3)))
コード例 #4
0
sys.path = ['.', '../', '../../'] + sys.path

from util import TreeNode, serializeTree, deserializeTree

class Solution:
    def insertIntoBST(self, root: TreeNode, val: int) -> TreeNode:
        if not root:
            return TreeNode(val)
        if val < root.val:
            root.left = self.insertIntoBST(root.left, val)
        else:
            root.right = self.insertIntoBST(root.right, val)
        return root

# [4, 2, 7, 1, 3, 5]
print(serializeTree(Solution().insertIntoBST(
    deserializeTree("[4, 2, 7, 1, 3]"), 5)))

# [40, 20, 60, 10, 30, 50, 70, null, null, 25]
print(serializeTree(Solution().insertIntoBST(
    deserializeTree("[40, 20, 60, 10, 30, 50, 70]"), 25)))

# [4, 2, 7, 1, 3, 5]
print(serializeTree(Solution().insertIntoBST(
    deserializeTree("[4, 2, 7, 1, 3, null, null, null, null, null, null]"), 5)))

# [5]
print(serializeTree(Solution().insertIntoBST(
    deserializeTree("[]"), 5)))

コード例 #5
0
class Solution:
    def trimBST(self, root: TreeNode, low: int, high: int) -> TreeNode:
        if root:
            if root.val < low:
                root = self.trimBST(root.right, low, high)
            elif root.val > high:
                root = self.trimBST(root.left, low, high)
            else:
                root.left = self.trimBST(root.left, low, high)
                root.right = self.trimBST(root.right, low, high)
        return root


# [1, null, 2]
print(serializeTree(Solution().trimBST(deserializeTree("[1, 0, 2]"), 1, 2)))

# [3, 2, null, 1]
print(
    serializeTree(Solution().trimBST(
        deserializeTree("[3, 0, 4, null, 2, null, null, 1]"), 1, 3)))

# [1]
print(serializeTree(Solution().trimBST(deserializeTree("[1]"), 1, 2)))

# [1, null, 2]
print(serializeTree(Solution().trimBST(deserializeTree("[1, null, 2]"), 1, 3)))

# [2]
print(serializeTree(Solution().trimBST(deserializeTree("[1, null, 2]"), 2, 4)))