//
// Created by Mr.Hu on 2018/8/4.
//
// leetcode 450 delete node in a BST
//
// 题目要求在BST(二叉搜索树)中删除val==key的节点,并返回删除节点后新的BST的root node
//
// 要想实现这样一个操作,需要进行两步,首先需要遍历BST判断是否存在这样的节点,根据BST的特点,
// 实际使用的是二分搜索方法去定位这样一个节点。
// 首先,如果这个不存在,则直接返回原树的根节点root;
// 如果节点存在,且节点是叶子节点,则直接删除这个节点即可;
// 如果节点存在,但是不是叶子节点,当我们删除这个节点后,此时BST的结构被破坏,我们需要更新这个
// BST,而更新的方法就是找到删除节点右边子数中最左叶子节点,将这个节点移动到当前删除的节点的位置,
// 并将该节点的右子树分配给其父节点当作左子树,这就能够保证BST的特性。
//
//
// 这个题目的代码我写的很多,分了几个函数来实现,我在解答完这个题目之后,想到了无需如此复杂的代码实现,
// 其实对于节点的交换和删除,我们没有必要去将节点真正重新连接,有时候我们只需要交换两个node的val值就可以了。
// 在以后类似的题目中进行实现。
//
1 |
|