树的广度优先插入和广度优先遍历
)
树的广度优先插入
首先写出泛型(java)
package com.bdrjxy.web;
public class QueueTest< T > {
private T[] data = (T[]) new Object[20];
private int start = 0;
private int end = 0;
public void push(T newint) {
if( end - start == data.length ) {
T[] datanew = (T[]) new Object[ data.length * 2 ];
for(int i = 0; i < data.length; i++) {
datanew[i] = data[ ( start + i ) % data.length ];
}
start = 0;
end = start + data.length;
data = datanew;
}
data[ end % data.length ] = newint;
end++;
}
public T get() {
if( end == start ) {
return null;
}
T result = data[start % data.length];
start++;
return result;
}
}
定义树类
package com.bdrjxy.web;
public class Tree {
public int value;//要事先定义这些值
public Tree left;
public Tree right;
@Override
public String toString() {
return "Tree [value=" + value + ", left=" + left + ", right=" + right + "]";
}
}
从队列中取出的每一个结点,当它完成自己的使命之后(指向新的结点,也就是它的左孩子和右孩子),就会被自动回收
然后就是我们的广度优先插入
package com.bdrjxy.web;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr = {1,4,7,2,43,12,66,43,21,87,67,54,32,11,0};
Tree root = new Tree();//定义树的根结点
root.value = arr[0];//赋值
QueueTest<Tree> queue = new QueueTest<Tree>();//新建队列
queue.push(root);//将根结点放入队列
for(int i = 1; i < arr.length;) {
Tree newtree = queue.get();//最先放进去最先拿出来,队列的特性
Tree nodel = new Tree();//每拿出来一个,让它分别指向新的结点之后,拿出来的这个被回收,然后继续先入先出
nodel.value = arr[ i ];
newtree.left = nodel;
queue.push(nodel);
if(i+1<arr.length){
Tree noder = new Tree();
noder.value = arr[ i+1 ];
newtree.right = noder;
queue.push(noder);
}
else{
break;
}
i += 2;//每次都有两个新的结点,所以循环每次加2
}
System.out.println(root);
}
}
树的广度优先遍历
版权声明:本文为fengchuiyuche原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。