コード例 #1
0
ファイル: main.py プロジェクト: hrxu01/leetcode
    def deleteNode(self, root: TreeNode, key: int) -> TreeNode:
        if not root:
            return None

        if key == root.val:
            if root.right:
                p = root
                cur = root.right
                while cur.left:
                    p = cur
                    cur = cur.left
                root.val = cur.val
                self.helper(p, cur)
            elif root.left:
                p = root
                cur = root.left
                while cur.right:
                    p = cur
                    cur = cur.right
                root.val = cur.val
                self.helper(p, cur)
            else:
                return None

        elif key < root.val:
            root.left = self.deleteNode(root.left, key)
        else:
            root.right = self.deleteNode(root.right, key)

        return root
コード例 #2
0
    def insertIntoBST(self, root: TreeNode, val: int) -> TreeNode:
        if not root:
            return TreeNode(val)

        if val > root.val:
            root.right = self.insertIntoBST(root.right, val)
        else:
            root.left = self.insertIntoBST(root.left, val)
        return root
コード例 #3
0
ファイル: main.py プロジェクト: hrxu01/leetcode
    def helper(self, nums, lower, upper):
        if not nums or not (lower < nums[0] < upper):
            return None

        val = nums.popleft()
        root = TreeNode(val)
        root.left = self.helper(nums, lower, val)
        root.right = self.helper(nums, val, upper)
        return root
コード例 #4
0
ファイル: main.py プロジェクト: hrxu01/leetcode
    def build(self, vals, b, e):
        if b > e:
            return None

        m = (e - b) // 2 + b
        root = TreeNode(vals[m])
        root.left = self.build(vals, b, m - 1)
        root.right = self.build(vals, m + 1, e)
        return root
コード例 #5
0
    def invertTree(self, root: TreeNode) -> TreeNode:
        if not root:
            return root

        prevLeft = root.left
        root.left = self.invertTree(root.right)
        root.right = self.invertTree(prevLeft)

        return root
コード例 #6
0
    def pruneTree2(self, root: TreeNode) -> TreeNode:
        if not root:
            return None

        root.left = self.pruneTree(root.left)
        root.right = self.pruneTree(root.right)
        if not root.left and not root.right and not root.val:
            return None
        return root
コード例 #7
0
ファイル: main.py プロジェクト: hrxu01/leetcode
    def mergeTrees(self, t1: TreeNode, t2: TreeNode) -> TreeNode:
        if not t1:
            return t2
        if not t2:
            return t1

        root = TreeNode(t1.val + t2.val)
        root.left = self.mergeTrees(t1.left, t2.left)
        root.right = self.mergeTrees(t1.right, t2.right)
        return root
コード例 #8
0
ファイル: main.py プロジェクト: hrxu01/leetcode
    def deserializeHelper(self, nums):
        if not nums:
            return None

        root = TreeNode(nums[0])
        i = 1
        while i < len(nums) and nums[i] < nums[0]:
            i += 1
        root.left = self.deserializeHelper(nums[1:i])
        root.right = self.deserializeHelper(nums[i:])
        return root
コード例 #9
0
    def deserialize(self, data):
        """Decodes your encoded data to tree.

        :type data: str
        :rtype: TreeNode
        """
        if not data:
            return None

        nodes = [
            TreeNode(int(x)) if x != 'null' else None for x in data.split()
        ]

        root = nodes[0]
        queue = [root]
        i = 1
        while queue:
            cur = queue.pop(0)
            if cur:
                cur.left = nodes[i]
                cur.right = nodes[i + 1]
                i += 2

                queue.append(cur.left)
                queue.append(cur.right)

        return root
コード例 #10
0
    def insertIntoBST2(self, root: TreeNode, val: int) -> TreeNode:
        if not root:
            return TreeNode(val)

        cur = root
        while True:
            if val > cur.val:
                if not cur.right:
                    cur.right = TreeNode(val)
                    break
                else:
                    cur = cur.right
            else:
                if not cur.left:
                    cur.left = TreeNode(val)
                    break
                else:
                    cur = cur.left
        return root
コード例 #11
0
ファイル: main.py プロジェクト: hrxu01/leetcode
    def deleteNode(self, root: TreeNode, key: int) -> TreeNode:
        if not root:
            return None

        if key == root.val:
            if not root.right:
                return root.left
            else:
                cur = root.right
                while cur.left:
                    cur = cur.left
                root.val = cur.val
                root.right = self.deleteNode(root.right, cur.val)
        elif key < root.val:
            root.left = self.deleteNode(root.left, key)
        else:
            root.right = self.deleteNode(root.right, key)

        return root
コード例 #12
0
ファイル: main.py プロジェクト: hrxu01/leetcode
    def addOneRow2(self, root: TreeNode, v: int, d: int) -> TreeNode:
        dummy = TreeNode(0)
        dummy.left = root

        q = [dummy]
        for _ in range(d - 1):
            q = [y for x in q for y in (x.left, x.right) if y]

        for node in q:
            nl, nr = TreeNode(v), TreeNode(v)
            nl.left = node.left
            node.left = nl
            nr.right = node.right
            node.right = nr

        return dummy.left
コード例 #13
0
ファイル: main.py プロジェクト: hrxu01/leetcode
    def addOneRow(self, root: TreeNode, v: int, d: int) -> TreeNode:
        if not root:
            return None

        if d == 1:
            res = TreeNode(v)
            res.left = root
            return res

        if d == 2:
            nl, nr = TreeNode(v), TreeNode(v)
            nl.left = root.left
            root.left = nl

            nr.right = root.right
            root.right = nr
        else:
            root.left = self.addOneRow(root.left, v, d - 1)
            root.right = self.addOneRow(root.right, v, d - 1)
        return root