- 左子树 < 根节点
- 右子树 > 根节点
递归比较节点值的大小
- 删除度为0的节点(叶子结点):直接删除
- 删除度为1的节点:直接提升其子树(因为度为1所以只有唯一子树)
- 删除度为2的节点:找到前驱和后继替换之后转换为度为1的问题
前驱就是左子树中最右边的节点,就是左子树中最大的,也就是中序遍历在当前节点的前面的
找到20的前驱19,将20替换成19之后。再删除原来的19就行了。
因为他的前驱不可能是度为2的节点 WHY?
最优/平均
最差
- 递归遍历二叉树系统开销大
- 二叉树有
n + 1
条边都没存储信息,可以用起来 - 对于退化成链表的二叉树遍历速度快
- 左右孩子为空,左指前驱,右指后继
- 不为空的,前驱为左子树最右边,后继为右子树最左边