用java写二叉树算法,实现添加数据形成二叉树功能,并以先序的方式打印出来?
解决方案 »
- 完全新手 询问J2EE的一些学习方向
- 从键盘输入2个正整数,求其最大公约数和最小公倍数
- 怎样在oc4j启动时加载一个应用程序
- struts+spring+hibernate怪异异常,高分求助!!!
- java 字符串乱码问题!!!
- 关于对文件加锁。
- javamail发送问题
- 急,Tomcat5.0.25出这个问题?
- 有一个类是要实现对数据库中的表的数据的存取,有一句代码不知为什么这样写?
- 难道就没人能够用java 实现类似word 公式编辑??400分用多贴加给你!!!肯定给!!
- SQL server 2005 的JDBC驱动的环境变量classpath设置了怎么还是找不到驱动
- 商量下程序员的出路和薪水
import java.util.Stack;
public class myTest {
private myTree tree;
/**
*二叉树的插入,参数为(关键字,数据)
*
**/
public void insert(int key, int data)
{
if(tree == null)
{
tree = new myTree();
tree.key = key;
tree.data = data;
}
else
{
myTree newTree = new myTree();
newTree.key = key;
newTree.data = data;
myTree parent = tree;
while(true)
{
if( newTree.key < parent.key)
{
if( parent.leftChild == null)
{
parent.leftChild = newTree;
return;
}
else
{
parent = parent.leftChild;
}
}
else if( newTree.key > parent.key)
{
if(parent.rightChild == null)
{
parent.rightChild = newTree;
return;
}
else
{
parent = parent.rightChild;
}
}
}
}
}
/**
* 二叉树的查找,参数为(关键字),返回值为 myTree的一个实例
*
* **/
public myTree find(int key)
{
if( tree == null ) return null;
myTree curr = new myTree();
curr.key = key;
myTree parent = tree;
while(true)
{
if( parent == null)
{
return null;
}
else if( curr.key == parent.key)
{
return parent;
}
else if( curr.key > parent.key)
{
parent = parent.rightChild;
}
else if( curr.key < parent.key)
{
parent = parent.leftChild;
}
}
}
/*
*
* 递归的二叉树中序遍历
*
*
*/
private static void midOrder(myTree tree)
{
if(tree != null )
{
midOrder(tree.leftChild);
System.out.println(tree+","+tree.key+","+tree.data);
midOrder(tree.rightChild);
}
}
/*
* 前序遍历
*/
private static void frontOrder(myTree tree)
{
if(tree != null)
{
System.out.println(""+tree.key+" , "+tree.data);
frontOrder(tree.leftChild);
frontOrder(tree.rightChild);
}
}
public static void main(String[] args)
{
System.out.println("Tree view Begin");
myTest t1 = new myTest();
t1.insert(8,25);
t1.insert(5,9);
t1.insert(58,87);
t1.insert(13,82);
t1.insert(4,8);
t1.insert(12,54);
t1.insert(53,123);
t1.insert(56,47);
t1.insert(2,75);
t1.insert(34,5);
t1.insert(6,23);
System.out.println("现在开始遍历:");
midOrder2(t1.tree);
midOrder(t1.tree);
}
}
public int key;
public Node left;
public Node right;
public Node(int key){
this.key = key;
}
public String toString(){
return "my key is "+key;
}
}
package com.xuz.datastruct.tree;public class Tree {
public Node root;
public Node findNode(Node node){
Node current = root ;
while (current.key != node.key) {
if (current.key > node.key) {
current = current.left;
} else {
current = current.right;
}
if (current == null) {
return null;
}
}
return current;
}
public void insertNode(Node node){
if (root == null) {
root = node;
} else {
Node current = root;
Node parent ;
while (true) {
parent = current;
if (current.key > node.key) {
current = current.left;
if (current == null) {
parent.left = node;
return ;
}
} else {
current = current.right;
if (current == null) {
parent.right = node;
return ;
}
}
}
}
} public void inOrder(Node current){
if (current != null) {
inOrder(current.left);
System.out.println(current);
inOrder(current.right);
}
}
public void preOrder(Node current){
if (current != null) {
System.out.println(current);
preOrder(current.left);
preOrder(current.right);
}
}
public void backOrder(Node current){
if (current != null) {
backOrder(current.left);
backOrder(current.right);
System.out.println(current);
}
} public Node minNode(){
Node current = root;
while (current.left != null) {
current = current.left;
}
return current;
}
public Node maxNode(){
Node current = root;
while (current.right != null) {
current = current.right;
}
return current;
} public boolean deleteNode(Node node){
Node current = root;
Node parent = root ;
boolean isLeft = true;
//找到要删除的节点
while (current.key != node.key) {
parent = current;
if (current.key > node.key) {
isLeft = true;
current = current.left;
} else {
isLeft = false;
current = current.right;
}
if (current == null) {
return false;
}
}
if (current.left == null && current.right == null) { //叶子
if (current.key == root.key) {
root = null;
} else if (isLeft) {
parent.left = null;
} else {
parent.right = null;
}
} else if (current.right == null) { //只有左节点
if (current.key == root.key) {
root = current.left;
} else if (isLeft) {
parent.left = current.left;
} else {
parent.right = current.left;
}
} else if (current.left == null) { //只有左节点
if (current.key == root.key) {
root = current.right;
} else if (isLeft) {
parent.left = current.right;
} else {
parent.right = current.right;
}
} else {//删除左右节点都有的节点
Node successor = getSuccessor(current); //找到中序后继
if (current == root) {
root = successor;
} else if (isLeft) {
parent.left = successor;
} else {
parent.right = successor;
}
successor.left = current.left;
} return true;
}
private Node getSuccessor(Node delNode){
Node successorParent = delNode;
Node successor = delNode;
Node current = delNode.right;
while(current != null){
successorParent = successor;
successor = current;
current = current.left;
}
if (successor != delNode.right) {
successorParent.left = successor.right;
successor.right = delNode.right;
}
return successor;
}
}
public class BinaryTree< T extends Comparable> {//二叉树
LinkedListvalues //一个链表
private Node root // 根节点
public void add(T value) {//在树中添加数据
if(root == null) {
root = new Node(value)
} else {
add(value, root)
}
}
// 在树中递归插入一个对象
private void add(T value, Node node) {
int comparison = node.obj.compareTo(value)
if(comparison == 0) {
++node.count
return
}
if(comparison > 0) {
if(node.left == null) {
node.left = new Node(value)
} else {
add(value, node.left)
}
} else {
if(node.right == null) {
node.right = new Node(value)
} else {
add(value, node.right)
}
}
}
public LinkedListsort() {//排序
values = new LinkedList()
treeSort(root)
return values
}
private void treeSort(Node node) {
if(node != null) {
treeSort(node.left)
// List the duplicate objects for the current node
for(int i = 0 i< node.count i++) {
values.addItem(node.obj)
}
treeSort(node.right) // Now process the right child
}
}
// 定义节点类
private class Node {
Node(T value) {
obj = value
count = 1
}
T obj // 存储在节点中的对象
int count // 相同节点的数目
Node left // 左孩子节点
Node right // 右孩子点
}
}
二、泛型链表
http://www.01yun.com/article.asp?3506.html