您的位置:首页 > 其它

二叉树实现学习

2010-10-21 10:05 218 查看
package com.javaeye.rsrt;

/**

*

* @author nishiting

*

*/

public class BinaryTree {

private Node root;

/**

* 内部类实现结点类,可提高安全性

* @author nishiting

*

*/

private static class Node {

Node left;

Node right;

int data;

Node(int newData) {

left = null;

right = null;

data = newData;

}

}

/**

* 创建一个空的二叉树

*/

public BinaryTree() {

root = null;

}

/**

* 递归的插入数值

* @param data 要插入的数值

*/

public void insert(int data) {

root = insert(root, data);

}

/**

* 将数值插入到二叉树中,比当前结点小或等于当前结点的插在当前结点的左侧,比当前结点大的数插在当前结点的右侧,每次从根结点开始递归比较

* @param node 当前的结点,就是根结点,只是每次根结点的左右子孙更新

* @param data 要插入的数值

* @return 新排好的二叉树

*/

private Node insert(Node node, int data) {

if (node == null) {

node = new Node(data);

} else {

if (data <= node.data) {

node.left = insert(node.left, data);

} else {

node.right = insert(node.right, data);

}

}

return (node);

}

/**

* 将数值输入构建二叉树

* @param data 要输入的数值

*/

public void buildTree(int[] data) {

for (int i = 0; i < data.length; i++) {

insert(data[i]);

}

}

/**

* 递归打印出二叉树

*/

public void printTree() {

printTree(root);

System.out.println();

}

/**

* 从根结点开始遍历,从树的最高层叶子结点开始输出,从左至右

* @param node 当前的结点

*/

private void printTree(Node node) {

if (node == null)

return;

// left, node itself, right

printTree(node.left);

System.out.print(node.data + " ");

printTree(node.right);

}

}

package com.javaeye.rsrt;

/**
*
* @author nishiting
*
*/

public class BinaryTree {

private Node root;

/**
* 内部类实现结点类,可提高安全性
* @author nishiting
*
*/

private static class Node {
Node left;
Node right;
int data;

Node(int newData) {
left = null;
right = null;
data = newData;
}

}

/**
* 创建一个空的二叉树
*/

public BinaryTree() {
root = null;
}

/**
* 递归的插入数值
* @param data	要插入的数值
*/

public void insert(int data) {
root = insert(root, data);
}

/**
* 将数值插入到二叉树中,比当前结点小或等于当前结点的插在当前结点的左侧,比当前结点大的数插在当前结点的右侧,每次从根结点开始递归比较
* @param node	当前的结点,就是根结点,只是每次根结点的左右子孙更新
* @param data	要插入的数值
* @return	新排好的二叉树
*/

private Node insert(Node node, int data) {

if (node == null) {

node = new Node(data);

} else {
if (data <= node.data) {
node.left = insert(node.left, data);
} else {
node.right = insert(node.right, data);
}
}
return (node);
}

/**
* 将数值输入构建二叉树
* @param data	要输入的数值
*/

public void buildTree(int[] data) {

for (int i = 0; i < data.length; i++) {

insert(data[i]);

}

}

/**
* 递归打印出二叉树
*/

public void printTree() {

printTree(root);

System.out.println();

}

/**
* 从根结点开始遍历,从树的最高层叶子结点开始输出,从左至右
* @param node	当前的结点
*/

private void printTree(Node node) {

if (node == null)
return;

// left, node itself, right

printTree(node.left);

System.out.print(node.data + "  ");

printTree(node.right);

}

}

测试类:

Java代码



package com.javaeye.rsrt;

import junit.framework.TestCase;

public class BinaryTreeTest extends TestCase {

public void testBinaryTreeTest() {

BinaryTree biTree = new BinaryTree();

int[] data = { 2, 8, 7, 4 ,9,3,1,6,7,5};

biTree.buildTree(data);

biTree.printTree();

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: