二叉树实现学习
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);
}
}
测试类:
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();
}
}
/**
*
* @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();
}
}
相关文章推荐
- 二叉树学习笔记-实现
- 二叉树的非递归实现【菜鸟学习日记】
- 二叉树学习:从零基础到代码实现
- 【学习笔记】非递归实现先后根遍历二叉树
- 数据结构学习笔记9——区分叶结点与分支结点的二叉树实现方案一
- 算法学习-二叉树节点和两种实现方法,递归非递归
- c++学习笔记—二叉树基本操作的实现
- 数据结构学习笔记10——区分叶结点与分支结点的二叉树实现方案二
- 数据结构学习笔记8——简单二叉树的实现与遍历
- 二叉树学习——前序、中序、后序遍历(Java实现)
- 【算法导论学习-22】二叉树专题1:一般二叉树的实现和常用处理函数
- java学习之路----java类库----Arrays对对象的排序---二叉树实现原理
- 数据结构与算法分析学习笔记--第四章(搜索二叉树,递归和非递归实现删除、插入)
- 二叉树学习总结(Java实现)
- 【C语言】【数据结构】菜鸟学习日志(四) 用二叉树实现非递归排序
- 小蚂蚁学习数据结构(24)——求二叉树深度和度为2的节点个数代码实现
- (学习java)二叉树的链式实现以及三种遍历方式
- 【学习点滴-数据结构-二叉树】二叉查找树源码实现
- 跟小刀学习 数据结构二叉树的实现
- 每天学习一算法系列(35)(递归和非递归俩种方法实现二叉树的前序遍历)