内容有点多,建议先收藏
目录
一.树的介绍
树由边连接的节点而组成,在图中用圆表示节点,实现表示边
路径:顺着节点从一个节点到另一个节点的顺序叫做路径
根:树顶端的节点叫根
父节点:连接下层节点的上层节点称为父节点,例如B是C,D的父节点
子节点:和父节点相连接的节点
叶节点:没有子节点的节点
二.java代码实现树
1.Node类
Node类是节点对象的类,包含了对象的数据
Node类的实现:
class Node{
int iData; //节点的键
double fData; //数据
Node leftChild; //左节点
Node rightChild; //右节点
}
Node类对象还可以指向一个代表数据类型的对象,而不是把数据项直接放在节点中:
class Node{
person p1;
Node leftChild;
Node rightChild;
}
class person{
int iData;
double fData;
}
2.Tree类
Tree类是一个数本身的类,Tree类中有查询,删除,插入以及遍历和显示的方法
Tree类的骨架:
class Tree{
private Node root; //根节点
public void insert(int id,double dd){
}
public void find(int key){
}
public void delete(int id){
}
//.......
}
3.查找节点
规定父节点的左节点小于父节点,右节点小于父节点,在查找是,最先和父节点比较,如果查找的对象小父节点就在父节点的左节点查找,反之在右节点查找,如此类推,直到找到
查找代码:
public Node find(int key){
Node current=root;
while(current.iData!=key){
if(key<current.iData) //如果小于
current=current.leftChild;
else //如果大于
current=current.rightChild;
if (current==null)
return null;
}
return current;
}
4.插入节点
插入节点,先查找到插入节点的父节点,如果插入的值大于父节点就插入到右节点,反之插入左节点
插入操作代码:
public void insert(int id,double dd){
Node newNode=new Node();
newNode.iData=id;
newNode.dData=dd;
if (root==null)
root=newNode;
else {
Node current=root;
Node parent;
while (true){
parent=current;
if(id<current.iData){
current=current.leftChild;
if (current==null){
parent.leftChild=newNode;
return;
}
else {
current=current.rightChild;
if (current==null){
parent.leftChild=newNode;
return;
}
}
}
}
}
}
5.遍历树
遍历树就是按顺序访问树的每一个节点,遍历有分为中序遍历,前序遍历和后序遍历
5.1 中序遍历
图解中序遍历:
从节点开始沿左边画路径线,当路径线结果节点正下方时该结点被遍历,如图遍历结果:20,30,40,50,60
中序遍历代码:
public void inOrder