做了很多年的程序员,觉得什么树的设计并不是非常实用.二叉树有顺序存储,当一个insert大量同时顺序自增插入的时候,树就会失去平衡.树的一方为了不让塌陷,会增大树的高度.性能会非常不好.好了,全部的题外话.分析需求在写代码.
import java.util.List;
import java.util.LinkedList;
public class Bintrees {
private static ListNode nodeList = null;
private static class Node {
Node leftChild;
Node rightChild;
int data;
Node(int newData) {
leftChild = null;
rightChild = null;
data = newData;
}
// 创建二叉树
public void createBintree() {
nodeList = new LinkedListNode();
// 将数组的值转换为node
for (int nodeIndex = 0; nodeIndex array.length; nodeIndex++) {
nodeList.add(new Node(array[nodeIndex]));
// 对除最后一个父节点按照父节点和孩子节点的数字关系建立二叉树
// 最后一个父节点
// 左孩子
// 如果为奇数,建立右孩子
// 前序遍历
public static void preOrderTraverse(Node node) {
if (node == null) {
return;
System.out.print(node.data + " ");
preOrderTraverse(node.leftChild);
preOrderTraverse(node.rightChild);
// 中序遍历
public static void inOrderTraverse(Node node) {
inOrderTraverse(node.leftChild);
inOrderTraverse(node.rightChild);
// 后序遍历
public static void postOrderTraverse(Node node) {
postOrderTraverse(node.leftChild);
postOrderTraverse(node.rightChild);
public static void main(String[] args) {
Bintrees binTree = new Bintrees();
binTree.createBintree();
Node root = nodeList.get(0);
System.out.println("前序遍历:");
preOrderTraverse(root);
System.out.println();
System.out.println("中序遍历:");
inOrderTraverse(root);
System.out.println("后序遍历:");
postOrderTraverse(root);
java 中的List接口就是顺序存储的集合机构,底层是用数组实现的,检索性能高,插入和删除性能较低,因为涉及到移位.代码简单演示:
ListInteger list = new ArrayListInteger(); // 定义一个用于存放整数的集合list,
list.add(100);
System.out.println(list.toString()); // 查看结果
int a = list.get(0) ; // 这将找出list中的第一个元素100,赋值给a
System.out.println(a); // 100
------------------------------------------------------------------------------------------------------
比较粗略,详细内容请查看ArrayList 的 API .祝你学习进步.
直接用数组或者ArrayList实现相应的功能,行吗?Java没有指针,LinkedList无法模拟
import java.util.ArrayList;
public class Test
{
/**
* @param args
*/
public static void main(String[] args)
// 创建一个顺序表
ListString a = new ArrayListString();
a.add("a");
a.add("b");
a.add("c");
a.add("x");
a.add("d");
// 按顺序输出创建的顺序表
for (int i = 0; i a.size(); i++)
System.out.println("序号:" + i + ", 值:" + a.get(i));
// 循环替换x为y
String value = a.get(i);
if ("x".equals(value))
a.set(i, "y");
// 按顺序输出替换后的顺序表
public class Test {
int ai = 1;
String data = "data";
String[] array = insertArrar(data, ai, length);
data = delArray(array, ai, length);
System.out.println(data);
public static String[] insertArrar(String data,int ai,int length){
String[] array = new String[length];
array[ai] = data;
return array;
public static String delArray(String[] array,int ai,int length){
String data = "";
data=array[ai];
array[ai]=null;
for(int i = 0; iarray.length;i++){
System.out.println(array[i]);
return data;
public class SeqList{
final int defaultSize=10;
int maxSize;
int size;
Object [] listArray;
public SeqList(){
initiate(defaultSize);
public SeqList(int size){
initiate(size);
private void initiate(int sz){
maxSize=sz;
size=0;
listArray=new Object[sz];
public void insert(int i,Object obj) throws Exception{
if(size==maxSize){
throw new Exception("顺序表已满无法插入");
listArray[i]=obj;
size++;
public Object delete(int i) throws Exception{
if(size==0){
throw new Exception("顺序表已空无法删除!");
Object it=listArray[i];
for(int j=i;jsize-1;j++)
listArray[j]=listArray[j+1];
size--;
return it;
public Object getData(int i) throws Exception{
if(i0||isize){
throw new Exception("参数错误");
return listArray[i];
public int size(){
return size;
public boolean isEmpty(){
return size==0;
public int MoreDadaDelete(SeqList L,Object x)throws Exception{
int i,j;
int tag=0;
for(i=0;iL.size;i++){
if(x.equals(L.getData(i))){
L.delete(i);
i--;
tag=1;
return tag;
以上就是土嘎嘎小编大虾米为大家整理的相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!