java实现二叉树删除节点
java实现二叉树删除节点
仅展示新增方法,全代码见前一章
节点类中
/**
* 删除节点
*
* @param id 需要删除节点的id
*/
public void delete(int id) {
if (this.left != null && this.left.id == id) {
this.left = null;
return;
}
if (this.right != null && this.right.id == id) {
this.right = null;
return;
}
if (this.left != null) {
this.left.delete(id);
}
if (this.right != null) {
this.right.delete(id);
}
}
二叉树类中
public void delete(int id) {
if (root == null) {
System.out.println("空树");
return;
}
if (root.getId() == id) {
root = null;
return;
}
root.delete(id);
}
测试类
public class deleteNode {
public static void main(String[] args) {
BinaryTree binaryTree = new BinaryTree();
// 创建需要的节点
Node root = new Node(000);
Node node01 = new Node(001);
Node node02 = new Node(002);
Node node03 = new Node(003);
Node node04 = new Node(004);
// 手动创建二叉树
binaryTree.setRoot(root);
root.setLeft(node01);
root.setRight(node02);
node02.setLeft(node03);
node02.setRight(node04);
System.out.println("删除前");
binaryTree.preOrder();
System.out.println("----------------");
binaryTree.delete(000);
System.out.println("删除后");
binaryTree.preOrder();
System.out.println("----------------");
}
}