lintcode_87. 删除二叉查找树的节点

给定一棵具有不同节点值的二叉查找树,删除树中与给定值相同的节点。如果树中没有相同值的节点,就不做任何处理。你应该保证处理之后的树仍是二叉查找树。

九章,简单思路。将删除节点转为重建二叉树。先遍历二叉查找树,将非删除节点值以外节点存入,然后重建二叉树。

有一个小bug,题意要求如果没有相同节点就不做任何处理,但是给出程序即使没有要删除值,也会重建树

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.
    """
    ans = []
    
    def removeNode(self, root, value):
        # write your code here
        self.inorder(root,value)
        return self.build(0,len(self.ans)-1)
        
    def inorder(self, root, value):
        if root is None:
            return 
        self.inorder(root.left, value)
        if root.val != value:
            self.ans.append(root.val)
        self.inorder(root.right, value)
    
    def build(self, l, r):
        if l == r:
            return TreeNode(self.ans[l])
        if l > r:
            return None
        
        mid = (l + r) / 2
        Node = TreeNode(self.ans[mid])
        Node.left = self.build(l, mid - 1)
        Node.right = self.build(mid + 1, r)
        
        return Node

对于二叉查找树,中序遍历结果一定为按序增长序列。然后二分重建树节点即可构造二叉查找树

posted @ 2018-01-05 10:19  Tom_NCU  阅读(118)  评论(0编辑  收藏  举报