树的广度优先插入和广度优先遍历


)

树的广度优先插入

首先写出泛型(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版权协议,转载请附上原文出处链接和本声明。