参考至:https://www.cnblogs.com/mzct123/p/8288047.html
简要分析:
BinaryTree:二叉排序树的类,包括二叉排序添加元素的方法,和顺序打印方法。其中每个二叉树都包含一个root节点。小。
Node:节点子类:节点类,包括节点数据,左节点(左子树)和右节点(右子树),还包括向节点中添加子节点addNode的方法。其中节点数据data是comparable类型,为了可以直接使用compareTo算法进行比较大
核心:每向二叉树中添加一个元素,其实就相当于想已经存在的二叉树的节点中添加一个节点。 但是二叉树,每次比较都是从根节点开始比较,因此,root节点就成为了二叉树添加的起始参考点
此外,我们用来比较的类型,需要实现Comparable接口。可以直接调用compareTo方法。
class BinaryTree{
class Node{ //声明一个节点类
private Comparable data; //节点的数据类型为Comparable
private Node left; //保存左子树
private Node right; //保存右子树
public Node(Comparable data){ //构造函数
this.data = data;
}
public void addNode(Node newNode){
//确定是放在左子树还是右子树
if(newNode.data.compareTo(this.data)<0){ //新节点值小于当前节点
if(this.left == null){
this.left = newNode; //左子树为空的话,新节点设为左子树
}else{
this.left.addNode(newNode); //否则继续向下判断
}
}else{ //新节点的值大于或等于当前节点
if(this.right == null){
this.right = newNode;
}else{
this.right.addNode(newNode);
}
}
}
public void printNode(){ //采用中序遍历
if(this.left != null){ //如果不为空先输出左子树
this.left.printNode();
}
System.out.print(this.data+"\t"); //输出当前根节点
if(this.right != null){ //输出右子树
this.right.printNode();
}
}
}
private Node root; //表示根元素
public void add(Comparable data){ //向二叉树中插入元素
Node newNode = new Node(data);
if(root == null){ //没有根节点
root = newNode;
}else{
root.addNode(newNode); /**/判断放在左子树还是右子树 * 向根节点中加入新的节点。
}
}
//中序遍历打印,按顺序打印出数据。
public void print(){
root.printNode(); //根据根节点输出
}
}
public class TestBinaryTreeSort {
public static void main(String args[]){
BinaryTree bt = new BinaryTree();
bt.add(3);
bt.add(5);
bt.add(4);
bt.add(8);
bt.add(7);
bt.add(8);
bt.add(1);
bt.print();
}
}