java实现二叉树的常见操作(一)

2014-11-24 02:57:47 · 作者: · 浏览: 3

树型结构是最常见的非线性结构,其中二叉树最为常见。今天我主要就是用java来实现一下树的一些常见操作。

首先需要一个用来存储树节点值的javabean:

view plain
public class TreeBean {

private int nodeva lue;

public int getNodeva lue() {
return nodeva lue;
}

public void setNodeva lue(int nodeva lue) {
this.nodeva lue = nodeva lue;
}
}
然后是树的节点bean:

view plain
public class TreeNode{

private TreeBean data;
private TreeNode leftNode;
private TreeNode rightNode;

//构造函数
public TreeNode(){
data = new TreeBean();
}

public TreeBean getData() {
return data;
}

public void setData(TreeBean data) {
this.data = data;
}

public TreeNode getLeftNode() {
return leftNode;
}
public void setLeftNode(TreeNode leftNode) {
this.leftNode = leftNode;
}
public TreeNode getRightNode() {
return rightNode;
}
public void setRightNode(TreeNode rightNode) {
this.rightNode = rightNode;
}

}
最后是Tree的主体:

view plain
public class Tree {
//树的根节点
private TreeNode root;
public TreeNode getRoot() {
return root;
}
public void setRoot(TreeNode root) {
this.root = root;
}

//无参构造函数
Tree(){}

Tree(int nodeva lue){
root = new TreeNode();
TreeBean nodeBean = new TreeBean();
nodeBean.setNodeva lue(nodeva lue);
root.setData(nodeBean);
}
/**
* 销毁树,将树置空。
* @author letthinking
* @param tree
* @return
*/
public static Tree destroy(Tree tree){
return null;
}
/**
* 给树插入数据
* @author letthinking
* @param root
* @param node
*/
public void insert(TreeNode root,TreeNode node){
//如果根节点为空,则赋值给根节点
if(root == null){
root = node;
}else{
//该节点与它的双亲节点比较,如果小于双亲节点,就将它作为左孩子,否则为右孩子。
if(node.getData().getNodeva lue() < root.getData().getNodeva lue()){
//判断该节点是否为空,如果不为空就继续递归。
if(root.getLeftNode() == null){
root.setLeftNode(node);
}else{
insert(root.getLeftNode(),node);
}
}else{
if(root.getRightNode() == null){
root.setRightNode(node);
}else{
insert(root.getRightNode(),node);
}
}
}
}

/**
* 将树的所有节点清空
* @author letthinking
* @param root 树的根节点
*/
public void clearTree(TreeNode root){

if(root.getData() == null){
if(root.getLeftNode() != null){
clearTree(root.getLeftNode());
}
if(root.getRightNode() != null){
clearTree(root.getRightNode());
}
}else{
root.setData(null);
if(root.getLeftNode() != null){
clearTree(root.getLeftNode());
}
if(root.getRightNode() != null){
clearTree(root.getRightNode());
}
}
}

/**
* 前序遍历二叉树
* @author letthinking
* @param root
* @return
*/
public String middleIterator(TreeNode root){
StringBuilder str = new StringBuilder();
//判断节