一、BinaryTreeDemo类
package 二叉树;
public class Demo {
public static void main(String[] args) {
BinaryTree binaryTree = new BinaryTree();
binaryTree.add(8);
binaryTree.add(1);
binaryTree.add(22);
binaryTree.add(33);
binaryTree.add(17);
binaryTree.add(4);
binaryTree.add(2);
binaryTree.add(6);
binaryTree.printCenterTree();
System.out.println("中序");
binaryTree.printBeforeTree();
System.out.println("前序");
binaryTree.printAfterTree();
System.out.println("后序");
}
}
二、BinaryTree类
package 二叉树;
// 比较小的数放在左边,比较大的书放在右边
public class BinaryTree {
private Node root; // 先定义一个根节点
public void add(int data) {
if (root == null) { // 如果跟节点不存在,就把数据放在根节点
root = new Node(data);
} else {
root.addNode(data);
}
}
public void printCenterTree() {
root.printCenterNode();
}
public void printBeforeTree() {
root.printBeforeNode();
}
public void printAfterTree() {
root.printAfterNode();
}
private class Node {
private int data; // 数据
private Node left; // 左边
private Node right; // 右边
public Node(int data) {
this.data = data;
}
public void addNode(int data) {
if (data > this.data) { // 大于根节点数放在右边
if (this.right == null) { // 如果根节点没有节点,就实例化赋值给右边
this.right = new Node(data);
} else {
this.right.addNode(data); // 如果存在右节点,一直递归到没有节点
}
} else {
if (this.left == null) {
this.left = new Node(data);
} else {
this.left.addNode(data);
}
}
}
// 打印节点
//中序打印(左根右)
public void printCenterNode() {
// 如果左节点存在,递归到不存在
if (this.left != null) {
this.left.printCenterNode();
}
System.out.print(this.data + "=>");
// 如果右节点存在,递归到不存在
if (this.right != null) {
this.right.printCenterNode();
}
}
// 前序打印(根左右)
public void printBeforeNode() {
System.out.print(this.data + "=>");
// 如果左节点存在,递归到不存在
if (this.left != null) {
this.left.printCenterNode();
}
// 如果右节点存在,递归到不存在
if (this.right != null) {
this.right.printCenterNode();
}
}
// 后续遍历 (左右根)
public void printAfterNode() {
// 如果左节点存在,递归到不存在
if (this.left != null) {
this.left.printCenterNode();
}
// 如果右节点存在,递归到不存在
if (this.right != null) {
this.right.printCenterNode();
}
System.out.print(this.data + "=>");
}
}
}