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