87. Remove Node in Binary Search Tree

題目

https://www.lintcode.com/problem/remove-node-in-binary-search-tree/description?_from=ladder&&fromId=2

實現

  1. 先中序遍歷一次樹,過濾掉要刪掉的節點
  2. 用中序遍歷的結果重新構造一新樹,返回新樹 root

代碼

class TreeNode:
    def __init__(self, val):
        self.val = val
        self.left, self.right = None, None


class Solution:
    """
    @param: root: The root of the binary search tree.
    @param: value: Remove the node with given value.
    @return: The root of the binary search tree after removal.
    """
    inorder_results = []

    def removeNode(self, root, value):
        # 獲取中序遍歷結果
        self.inorder(root, value)
        # 用中序遍歷結果重新構造樹
        new_root = self.build_tree(0, len(self.inorder_results) - 1)

        return new_root

    def inorder(self, root, value):
        if root is None:
            return

        self.inorder(root.left, value)
        if root.val != value:
            self.inorder_results.append(root.val)
        self.inorder(root.right, value)

    def build_tree(self, left, right):
        if left == right:
            return TreeNode(self.inorder_results[left])

        if left > right:
            return None

        mid = (left + right) // 2
        node = TreeNode(self.inorder_results[mid])
        node.left = self.build_tree(left, mid - 1)
        node.right = self.build_tree(mid + 1, right)

        return node
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章