啥都不说了,直接上代码
package com.inter.structure;
import java.util.Random;
/**
* 使用Java实现二叉树排序 二叉树只有一个根节点
*
* @author Hua
*
*/
public class HuaBinaryTree {
// 二叉树的根
private Node root;
// 添加数据
private void add(int data) {
if (root != null) {
// 如果根已经创建,就调用元素的添加方法
root.add(data);
} else {
root = new Node(data);
}
}
// 输出二叉树的数值
private void print() {
root.printNode();
}
// 查找二叉树
private boolean find(int data) {
return root.find(data);
}
/**
* 测试
*/
public static void main(String[] args) {
HuaBinaryTree root = new HuaBinaryTree();
// 我们生成50个随机数,然后保存在二叉树中
int[] intArray = new int[50];
for (int i = 0; i < intArray.length; i++) {
// 返回一个大于等于0小于n的随机数
int temp = new Random().nextInt(100);
intArray[i] = temp;
root.add(temp);
}
System.out.println("要查找的数组元素是:" + intArray[20]);
root.find(intArray[20]);
root.print();
}
/**
* 元素类
*
* @author Hua
*
*/
class Node {
private int data;
private Node left;// 左子树
private Node right;// 右子树
public Node(int data) {
this.data = data;
}
// 添加元素
public void add(int data) {
// 如果根大于传递进来的数值
if (this.data > data) {
if (this.left == null) {
left = new Node(data);
} else {
// 如果左子树有数值了,就进行递归,继续往左边找
left.add(data);
}
} else {
if (this.right == null) {
right = new Node(data);
} else {
right.add(data);
}
}
}
// 中序输出二叉树
private void printNode() {
System.out.print("排序后的二叉树:");
if (this.left != null) {
// 递归调用,直到找到最左边的数值(即最小数值)
this.left.printNode();
}
System.out.print(this.data + ",");
if (this.right != null) {
this.right.printNode();
}
}
// 查找指定元素
public boolean find(int data) {
System.out.println("happen " + this.data);
// 如果找到了这个数值,就返回true
if (data == this.data) {
return true;
} else if (data > this.data) {
// 要找的数值比较大,就往右找
if (right == null) {// 找到了最后边,返回false
return false;
}
return right.find(data);
} else {
if (left == null) {// 找到了最左边
return false;
}
return left.find(data);
}
}
}
}