二叉树的操作
1. 插入结点
从根结点开始查找一个相应的结点,这个结点将称为新插入结点的父结点。当父结点找到后,通过判断新结点的值与父结点的值的大小来决定是连接到左子结点还是右子结点。
2. 查找结点
从根结点开始查找,如果查找的结点值比当前结点的值小,则继续查找其左子树,否则查找其右子树。
二叉树结点
/*
* 二叉树结点
*/
public class Node {
//数据项
public long data;
//数据项
public String sData;
//左子结点
public Node leftChild;
//右子结点
public Node rightChild;
/*
* 构造函数
*/
public Node(long data,String sData){
this.data=data;
this.sData=sData;
}
}
二叉树类
/*
* 二叉树类
*/
/*
* 为什么要使用树
*
* 有序数组插入数据项和删除数据项太慢
* 链表查找数据太慢
* 在树中能非常快速的查找数据项、删除数据项和插入数据项
*/
public class Tree {
//根结点
public Node root;
/*
* 插入结点
*/
public void insert(long value,String sValue){
//封装结点
Node newNode=new Node(value,sValue);
//引用当前结点
Node current=root;
//引用父结点
Node parent;
//如果root为null,也就是第一插入的时候
if(root==null){
root=newNode;
return;
}else{
while(true){
//父结点指向当前结点
parent=current;
//如果当前指向的结点数据比插入的要大,则向左走
if(current.data>value){
current=current.leftChild;
if(current==null){
parent.leftChild=newNode;
return;
}
}else{
current=current.rightChild;
if(current==null){
parent.rightChild=newNode;
return;
}
}
}
}
}
/*
* 查找结点
*/
public Node find(long value){
//引用当前结点,从跟结点开始
Node current=root;
//循环,只要查找值不等于当前结点的数据项
while(current.data!=value){
//进行比较,比较查找值和当前结点的大小
if(current.data>value){
current=current.leftChild;
}else{
current=current.rightChild;
}
//如果查找不到
if(current==null){
return null;
}
}
return current;
}
/*
* 删除结点
*/
public void delete(long value){
}
}