java 2叉树是什么(用java实现二叉树)
大家好,感谢邀请,今天来为大家分享一下java 2叉树是什么的问题,以及和用java实现二叉树的一些困惑,大家要是还不太明白的话,也没有关系,因为接下来将为大家分享,希望可以帮助到大家,解决大家的问题,下面就开始吧!
用java实现二叉树
我有很多个(假设10万个)数据要保存起来,以后还需要从保存的这些数据中检索是否存在某
个数据,(我想说出二叉树的好处,该怎么说呢?那就是说别人的缺点),假如存在数组中,
那么,碰巧要找的数字位于99999那个地方,那查找的速度将很慢,因为要从第1个依次往
后取,取出来后进行比较。平衡二叉树(构建平衡二叉树需要先排序,我们这里就不作考虑
了)可以很好地解决这个问题,但二叉树的遍历(前序,中序,后序)效率要比数组低很多,
public class Node{
public int value;
public Node left;
public Node right;
public void store(intvalue)
right.value=value;
}
else
{
right.store(value);
}
}
}
public boolean find(intvalue)
{
System.out.println("happen"+this.value);
if(value==this.value)
{
return true;
}
else if(value>this.value)
{
if(right==null)returnfalse;
return right.find(value);
}else
{
if(left==null)returnfalse;
return left.find(value);
}
}
public void preList()
{
System.out.print(this.value+",");
if(left!=null)left.preList();
if(right!=null) right.preList();
}
public void middleList()
{
if(left!=null)left.preList();
System.out.print(this.value+",");
if(right!=null)right.preList();
}
public void afterList()
{
if(left!=null)left.preList();
if(right!=null)right.preList();
System.out.print(this.value+",");
}
public static voidmain(String [] args)
{
int [] data=new int[20];
for(inti=0;i<data.length;i++)
{
data[i]=(int)(Math.random()*100)+ 1;
System.out.print(data[i]+",");
}
System.out.println();
Node root= new Node();
root.value= data[0];
for(inti=1;i<data.length;i++)
{
root.store(data[i]);
}
root.find(data[19]);
root.preList();
System.out.println();
root.middleList();
System.out.println();
root.afterList();
}
}
java实现二叉树的问题
/**
*二叉树测试二叉树顺序存储在treeLine中,递归前序创建二叉树。另外还有能
*够前序、中序、后序、按层遍历二叉树的方法以及一个返回遍历结果asString的
*方法。
*/
public class BitTree{
public static Node2 root;
public static String asString;
//事先存入的数组,符号#表示二叉树结束。
public static final char[] treeLine={'a','b','c','d','e','f','g','','','j','','','i','#'};
//用于标志二叉树节点在数组中的存储位置,以便在创建二叉树时能够找到节点对应的数据。
static int index;
//构造函数
public BitTree(){
System.out.print("测试二叉树的顺序表示为:");
System.out.println(treeLine);
this.index= 0;
root= this.setup(root);
}
//创建二叉树的递归程序
private Node2 setup(Node2 current){
if(index>= treeLine.length) return current;
if(treeLine[index]=='#') return current;
if(treeLine[index]=='') return current;
current= new Node2(treeLine[index]);
index= index* 2+ 1;
current.left= setup(current.left);
index++;
current.right= setup(current.right);
index= index/ 2- 1;
return current;
}
//二叉树是否为空。
public boolean isEmpty(){
if(root== null) return true;
return false;
}
//返回遍历二叉树所得到的字符串。
public String toString(int type){
if(type== 0){
asString="前序遍历:\t";
this.front(root);
}
if(type== 1){
asString="中序遍历:\t";
this.middle(root);
}
if(type== 2){
asString="后序遍历:\t";
this.rear(root);
}
if(type== 3){
asString="按层遍历:\t";
this.level(root);
}
return asString;
}
//前序遍历二叉树的循环算法,每到一个结点先输出,再压栈,然后访问它的左子树,
//出栈,访问其右子树,然后该次循环结束。
private void front(Node2 current){
StackL stack= new StackL((Object)current);
do{
if(current== null){
current=(Node2)stack.pop();
current= current.right;
} else{
asString+= current.ch;
current= current.left;
}
if(!(current== null)) stack.push((Object)current);
} while(!(stack.isEmpty()));
}
//中序遍历二叉树
private void middle(Node2 current){
if(current== null) return;
middle(current.left);
asString+= current.ch;
middle(current.right);
}
//后序遍历二叉树的递归算法
private void rear(Node2 current){
if(current== null) return;
rear(current.left);
rear(current.right);
asString+= current.ch;
}
}
/**
*二叉树所使用的节点类。包括一个值域两个链域
*/
public class Node2{
char ch;
Node2 left;
Node2 right;
//构造函数
public Node2(char c){
this.ch= c;
this.left= null;
this.right= null;
}
//设置节点的值
public void setChar(char c){
this.ch= c;
}
//返回节点的值
public char getChar(){
return ch;
}
//设置节点的左孩子
public void setLeft(Node2 left){
this.left= left;
}
//设置节点的右孩子
public void setRight(Node2 right){
this.right= right;
}
//如果是叶节点返回true
public boolean isLeaf(){
if((this.left== null)&&(this.right== null)) return true;
return false;
}
}
一个作业题,里面有你要的东西。
主函数自己写吧。当然其它地方也有要改的。
java 构建二叉树
首先我想问为什么要用LinkedList来建立二叉树呢? LinkedList是线性表,
树是树形的,似乎不太合适。
其实也可以用数组完成,而且效率更高.
关键是我觉得你这个输入本身就是一个二叉树啊,
String input="ABCDE F G";
节点编号从0到8.层次遍历的话:
对于节点i.
leftChild= input.charAt(2*i+1);//做子树
rightChild= input.charAt(2*i+2);//右子树
如果你要将带有节点信息的树存到LinkedList里面,先建立一个节点类:
class Node{
public char cValue;
public Node leftChild;
public Node rightChild;
public Node(v){
this.cValue= v;
}
}
然后遍历input,建立各个节点对象.
LinkedList tree= new LinkedList();
for(int i=0;i< input.length;i++)
LinkedList.add(new Node(input.charAt(i)));
然后为各个节点设置左右子树:
for(int i=0;i<input.length;i++){
((Node)tree.get(i)).leftChild=(Node)tree.get(2*i+1);
((Node)tree.get(i)).rightChild=(Node)tree.get(2*i+2);
}
这样LinkedList就存储了整个二叉树.而第0个元素就是树根,思路大体是这样吧。
好了,关于java 2叉树是什么和用java实现二叉树的问题到这里结束啦,希望可以解决您的问题哈!