链式二叉树:
二叉树为链式存储结构,每个节点中有两个指针域,分别保存左右孩子指针
实现思路:
节点类BinaryTreeNode中保存数据和指向左右孩子的指针
二叉树类BinaryTree中保存二叉树根节点
二叉树的前序、中序、后序遍历实现:
在节点类中通过递归实现三种遍历方法,并在二叉树类中调用,实现从根节点进行遍历
二叉树的删除节点:
在节点类中实现删除节点方法,对当前节点的左右孩子是否为空和是否为待删除节点进行判断,若找到待删除节点,只需将当前节点的对应孩子节点指针置空,否则以此对左孩子和右孩子递归删除节点,在二叉树类中的删除节点方法需进行根节点是否为空和是否为待删除节点的判断,若根节点为待删除结点,则将根节点置空,也就是将整个二叉树置空
代码实现:
节点类BinaryTreeNode:
public class BinaryTreeNode {
public int data;
public BinaryTreeNode left;
public BinaryTreeNode right;
public BinaryTreeNode(int data) {
this.data = data;
}
@Override
public String toString() {
return "BinaryTreeNode{" + "data=" + data + '}';
}
//删除节点
public void delete(int data) {
if (this.left != null && this.left.data == data) {
this.left = null;
return;
}
if (this.right != null && this.right.data == data) {
this.right = null;
return;
}
if (this.left != null) {
this.left.delete(data);
}
if (this.right != null) {
this.right.delete(data);
}
}
//前序遍历
public void preOrder() {
System.out.println(this);
if (this.left != null) {
this.left.preOrder();
}
if (this.right != null) {
this.right.preOrder();
}
}
//中序遍历
public void inOrder() {
if (this.left != null) {
this.left.inOrder();
}
System.out.println(this);
if (this.right != null) {
this.right.inOrder();
}
}
//后序遍历
public void postOrder() {
if (this.left != null) {
this.left.postOrder();
}
if (this.right != null) {
this.right.postOrder();
}
System.out.println(this);
}
}
二叉树类BinaryTree:
public class BinaryTree {
public BinaryTreeNode root;
//删除节点
public void delete(int data) {
if (root != null) {
if (root.data == data) {
root = null;
} else {
root.delete(data);
}
} else {
System.out.println("二叉树为空");
}
}
//前序遍历
public void preOrder() {
if (this.root != null) {
this.root.preOrder();
} else {
System.out.println("二叉树为空");
}
}
//中序遍历
public void inOrder() {
if (this.root != null) {
this.root.inOrder();
} else {
System.out.println("二叉树为空");
}
}
//后序遍历
public void postOrder() {
if (this.root != null) {
this.root.postOrder();
} else {
System.out.println("二叉树为空");
}
}
}