定义节点类:
package Demo31;
public class TreeNode {
private TreeNode left;//左子树地址
private Integer data;//值域
private TreeNode right;//右子树地址
@Override
public String toString() {
return "TreeNode{" +
"left=" + left +
", data=" + data +
", right=" + right +
'}';
}
public TreeNode(Integer data) {
this.data = data;
}
public TreeNode getLeft() {
return left;
}
public void setLeft(TreeNode left) {
this.left = left;
}
public Integer getData() {
return data;
}
public void setData(Integer data) {
this.data = data;
}
public TreeNode getRight() {
return right;
}
public void setRight(TreeNode right) {
this.right = right;
}
}
二叉树本体:
package Demo31;
public class Tree {
private TreeNode root;
public TreeNode getRoot() {//根节点,得到根节点
return root;
}
public void diguiInsert(TreeNode node, int val) {//插入数据的两种方式
//这种方式是递归
TreeNode treeNode = new TreeNode(val);
if (root == null) {
root = treeNode;
return;
}
if (val < node.getData() ) {
if (node.getLeft() == null) {
node.setLeft(treeNode);
return;
} else {
diguiInsert(node.getLeft(), val);
}
} else {
if (node.getRight() == null) {
node.setRight(treeNode);
return;
} else {
diguiInsert(node.getRight(), val);
}
}
}
public void insert(int val) {//这种方式是循环
TreeNode treeNode = new TreeNode(val);
// 判断 root 是不是空
if (root == null) {
root = treeNode;
return;
}
TreeNode temp = root;
while (true) {
if (treeNode.getData() >= temp.getData()) {
if (temp.getRight() == null) {
temp.setRight(treeNode);
return;
}
else temp = temp.getRight();
} else {
if (temp.getLeft() == null) {
temp.setLeft(treeNode);
return;
}
temp = temp.getLeft();
}
}
}
public void preSearch(TreeNode tree) {//前序
if (tree != null) {
System.out.println(tree.getData());
preSearch(tree.getLeft());
preSearch(tree.getRight());
}
}
public void midSearch(TreeNode tree) {//中序
if (tree != null) {
midSearch(tree.getLeft());
System.out.println(tree.getData());
midSearch(tree.getRight());
}
}
public void lastSearch(TreeNode tree) {//后序
if (tree != null) {
lastSearch(tree.getLeft());
lastSearch(tree.getRight());
System.out.println(tree.getData());
}
}
}