二叉排序树_Java简单实现
2014-03-22 11:03
218 查看
动态查找过程中需要进行插入和删除操作,如果采用线性表顺序存储的话,这些操作很费时,因此二叉排序树是一个很好的解决方案。
二叉排序树(也成为二叉查找树),具有下列性质:如果它的左子树不空,则左子树上所有节点的值均小于它的根节点的值;如果它的右子树不空,则右子树上的所有节点的值均小于它的更节点的值,下面是一个Java程序实现的二叉查找树。
package search;
class Node<T> {
private T value;
public T getValue() {
return value;
}
public void setValue(T value) {
this.value = value;
}
public Node<T> getL_child() {
return l_child;
}
public void setL_child(Node<T> l_child) {
this.l_child = l_child;
}
public Node<T> getR_child() {
return r_child;
}
public void setR_child(Node<T> r_child) {
this.r_child = r_child;
}
private Node<T> l_child;
private Node<T> r_child;
public Node() {
}
public Node(T t) {
value = t;
}
}
public class BinarySearch {
// test main method
public static void main(String[] args) {
int[] array = { 19, 12, 3, 22, 6, 7, 21, 11, 43 };
Node<Integer> root = new Node<Integer>(array[0]);
for (int i = 1; i < array.length; i++) {
binarySort(root, array[i]);
}
// look this binary tree
inOrderTraverse(root);
if (binarySerach(root, 12)) {
System.out.println("二叉树中存在此元素");
} else {
System.out.println("二叉树中不存在该元素");
}
}
// 二叉排序树插入操作
public static void binarySort(Node<Integer> root, int key) {
int value = root.getValue();
if (key < value) {
if (root.getL_child() == null) {
Node<Integer> r = new Node<Integer>(key);
root.setL_child(r);
} else {
binarySort(root.getL_child(), key);
}
} else {
if (root.getR_child() == null) {
Node<Integer> r = new Node<Integer>(key);
root.setR_child(r);
} else {
binarySort(root.getR_child(), key);
}
}
}
public static boolean binarySerach(Node<Integer> root, int key) {
if (root == null) {
// throw new NullPointerException();
return false;
} else if (root.getValue() == key) {
return true;
} else if (root.getValue() < key) {
return binarySerach(root.getR_child(), key);
} else {
return binarySerach(root.getL_child(), key);
}
}
//中序遍历
public static void inOrderTraverse(Node<Integer> root) {
if (root == null) {
return;
}
inOrderTraverse(root.getL_child());
System.out.println(root.getValue());
inOrderTraverse(root.getR_child());
}
}
二叉排序树(也成为二叉查找树),具有下列性质:如果它的左子树不空,则左子树上所有节点的值均小于它的根节点的值;如果它的右子树不空,则右子树上的所有节点的值均小于它的更节点的值,下面是一个Java程序实现的二叉查找树。
package search;
class Node<T> {
private T value;
public T getValue() {
return value;
}
public void setValue(T value) {
this.value = value;
}
public Node<T> getL_child() {
return l_child;
}
public void setL_child(Node<T> l_child) {
this.l_child = l_child;
}
public Node<T> getR_child() {
return r_child;
}
public void setR_child(Node<T> r_child) {
this.r_child = r_child;
}
private Node<T> l_child;
private Node<T> r_child;
public Node() {
}
public Node(T t) {
value = t;
}
}
public class BinarySearch {
// test main method
public static void main(String[] args) {
int[] array = { 19, 12, 3, 22, 6, 7, 21, 11, 43 };
Node<Integer> root = new Node<Integer>(array[0]);
for (int i = 1; i < array.length; i++) {
binarySort(root, array[i]);
}
// look this binary tree
inOrderTraverse(root);
if (binarySerach(root, 12)) {
System.out.println("二叉树中存在此元素");
} else {
System.out.println("二叉树中不存在该元素");
}
}
// 二叉排序树插入操作
public static void binarySort(Node<Integer> root, int key) {
int value = root.getValue();
if (key < value) {
if (root.getL_child() == null) {
Node<Integer> r = new Node<Integer>(key);
root.setL_child(r);
} else {
binarySort(root.getL_child(), key);
}
} else {
if (root.getR_child() == null) {
Node<Integer> r = new Node<Integer>(key);
root.setR_child(r);
} else {
binarySort(root.getR_child(), key);
}
}
}
public static boolean binarySerach(Node<Integer> root, int key) {
if (root == null) {
// throw new NullPointerException();
return false;
} else if (root.getValue() == key) {
return true;
} else if (root.getValue() < key) {
return binarySerach(root.getR_child(), key);
} else {
return binarySerach(root.getL_child(), key);
}
}
//中序遍历
public static void inOrderTraverse(Node<Integer> root) {
if (root == null) {
return;
}
inOrderTraverse(root.getL_child());
System.out.println(root.getValue());
inOrderTraverse(root.getR_child());
}
}
相关文章推荐
- java实现简单的二叉排序树
- 基于Java实现简单Http服务器之一
- JAVA中实现链式操作(方法链)的简单例子
- Java学习篇之---JNI简单实现
- 001-简单的java代码实现几种排序算法(插入,快速,冒泡,选择)
- java简单实现Http服务器,及遇到的问题
- 数据结构之动态队列的java简单实现
- Java网络编程:简单聊天机器人实现案例
- 简单倒排索引Java实现
- 【2015/6/9】快速排序的java简单实现
- 【Java】Swing+IO流实现一个简单的文件加密程序(demo版)
- Java单例类的简单实现
- java网络编程六:DatagramSocket类简单实现文件下载
- java实现简单的素数判断
- Java实现简单的RPC框架
- java实现的简单网页爬虫:Servlet 搜索引擎核心爬虫程序(三)
- java字符串数组进行大小排序的简单实现
- 使用Java实现一个最简单的Web Server
- Java使用cookie实现简单的单点登录功能
- Java简单双向链表实现 @version 1.0