二叉树学习笔记
树的实现注意
在实现二叉查询树的时候一定要注意最复杂的删除
删除操作要考虑四个情况。
- 无子节点
- 无左子节点
- 无右子节点
- 有左右子节点
第四种情况是最复杂的。
思路如下:
为了保证二叉查找树的顺序不乱,必须找出被删除节点的后继者来。 后继者就是被删除节点的右子节点的最左叶子。 并且在剥离被删除者的同时必须把他的父子关系理好。 后继者的儿子也要跟着贴到原来后继者的位置,才能保证树的完整性。```java private TreeNode getSuccessor(TreeNode delNode) { TreeNode n = delNode.rightChild; TreeNode successor = n; TreeNode sucParent = null; while (n.leftChild != null) { sucParent = successor; successor = n; n = n.leftChild; } // 将后继者的子节点放到后继者原来的位置上 if (successor != delNode.rightChild) { // 将被删除的右孩子连接到后继节点的右节点上,准备把被删除者剥离结构体 sucParent.leftChild = successor.rightChild; // 把后继者嫁接到被删除者的位置,并连接他的儿子 successor.rightChild = delNode.rightChild; } return successor; } ```
这四种情况每种情况都要考虑被删除的节点也有三个情况。
- 是根节点?
- 是左子节点?
- 是右子节点?

浙公网安备 33010602011771号