1、如果删除的节点是叶子节点,则删除该节点
2、如果删除的节点不是叶子节点,则删除该子树
public class BinaryTreeDemo {
public static void main(String[] args) {
//创建一颗二叉树
BinaryTree binaryTree = new BinaryTree();
//创建需要的节点
Node root = new Node(0);
Node one = new Node(1);
Node two = new Node(2);
Node three = new Node(3);
Node four = new Node(4);
Node five = new Node(5);
Node six = new Node(6);
Node seven = new Node(7);
Node eight = new Node(8);
//建立树结构
/* 随意创建一颗二叉树
0
/ \
1 2
/ \ / \
3 4 5 6
\ /
7 8
*/
binaryTree.setRoot(root);
root.left = one;
root.right = two;
one.left = three;
one.right = four;
two.left = five;
two.right = six;
three.right = seven;
five.left = eight;
// binaryTree.delNode(2); //=>0=>1=>3=>7=>4
// binaryTree.delNode(0); //二叉树为空,无法遍历~
binaryTree.delNode(5);
binaryTree.preOrder();
}
}
class BinaryTree {
private Node root;
public void setRoot(Node root) {
this.root = root;
}
public void delNode(int n) {
if (root != null) {
if (root.num == n) {
root = null;
return;
} else {
root.delNode(n);
}
}
}
public void preOrder() {
if (this.root != null) {
root.preOrder();
} else {
System.out.println("二叉树为空,无法遍历~");
}
}
}
class Node {
public int num;
public Node left;
public Node right;
public Node(int num) {
this.num = num;
}
@Override
public String toString() {
return num + "";
}
public void delNode(int n) {
if (this.left != null && this.left.num == n) {
this.left = null;
return;
}
if (this.right != null && this.right.num == n) {
this.right = null;
return;
}
if (this.left != null) {
this.left.delNode(n);
}
if (this.right != null) {
this.right.delNode(n);
}
}
/**
* 先序遍历
*/
public void preOrder() {
System.out.print("=>" + this);
if (this.left != null) {
this.left.preOrder();
}
if (this.right != null) {
this.right.preOrder();
}
}
}