二叉树的常用操作
*二叉树的节点
package com.tree;
/**
* 二叉树的节点
*/
public class Node {
//数据项
public long data;
//数据项,可以存在多个数据项,一个作为索引,一个是真正的数据内容
public String sData;
//左子节点
public Node liftChild;
//右子节点
public Node rightChild;
//构造方法
public Node(long data,String sData){
this.data=data;
this.sData=sData;
}
}
一、插入节点
从根节点开始查找一个相应的节点,这个节点将成为新插入节点的父节点。当父节点找到后,通过判断新节点的值与父节点的值的大小来判断连接到左子节点还是右子节点。
package com.tree;
/**
* 二叉树
*/
public class Tree {
//根节点
public Node root;
/**
* 插入节点
*/
public void insert(long value,String sData){
//封装节点成为一个对象
Node newNode=new Node(value,sData);
//创建引用,引用当前节点
Node current=root;
//引用父节点
Node parent;
//判断,如果root为null,也就是第一次插入的时候
if(root==null){
root=newNode;
return;
}
else{
while(true){
//把父节点的引用指向当前节点
parent=current;
//如果当前指向的节点数据比要插入的数据大,则向左走
if(current.data>value){
current=current.liftChild;
if(current==null){
parent.liftChild=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.liftChild;
}else{
current=current.rightChild;
}
//如果找不到
if(current==null){
return null;
}
}
return current;
}
/** * 前序遍历 */ public void frontOrder(Node localNode){ if(localNode!=null){ //访问根节点 System.out.println(localNode.data+ "," +localNode.sData); //遍历左子树 frontOrder(localNode.liftChild); //遍历右子树 frontOrder(localNode.rightChild); } } /** * 中序遍历 */ public void midOrder(Node localNode){ if(localNode!=null){ //遍历左子树 midOrder(localNode.liftChild); //访问根节点 System.out.println(localNode.data+ "," +localNode.sData); //遍历右子树、 midOrder(localNode.rightChild); } } //后序遍历 public void afterOrder(Node localNode){ if(localNode!=null){ //遍历左子树 afterOrder(localNode.liftChild); //遍历右子树 afterOrder(localNode.rightChild); //访问根节点 System.out.println(localNode.data+ "," +localNode.sData); } }
删除节点会在后续文章中单独分析,然后分享敬请期待