java算法面试题

题目:int values[] = {80099, 16114, 63108, 25032, 31044, 59069, 39099, 13110, 34101, 66120,19116, 72105, 70045, 38032, 41110, 12105, 75110, 27105, 1105, 9114,67117, 20101, 21100, 11032, 79046, 32112, 5111, 6117, 45116, 22032,61097, 65120, 49110, 15101, 82109, 50103, 54110, 17101, 46032, 4121,
76097, 7032, 57105, 2102, 58044, 8097, 44099, 73064, 81111, 43097,30112, 14116, 60109, 74104, 77105, 35097, 64058, 29112, 55032, 33108,71108, 40111, 47088, 52117, 56076, 68097, 37101, 78114, 24110, 53097,69110, 48105, 18115, 26072, 3032, 42116, 62105, 51120, 28065, 10101,23105, 36115}
这样一个数组,操作如下。
1.首先将数组的内容有序的存入二叉树中。
2.然后由小到大遍历二叉树。
3.把遍历到的数值取后三位转化成字符串输出。
代码如下所示:

import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
import java.util.TreeSet;

public class Bintree {
	public Bintree left;
	public Bintree right;
	public Bintree root;
	private Object data;
	public List<Bintree> datas;
	public Bintree(Bintree left,Bintree right,Object data) {
		this.left=left;
		this.right=right;
		this.data=data;
	}
	public Bintree(Object data) {
		this(null,null,data);
	}
	public Bintree() {
		
	}
	public void creat(Object[] obj) {
		datas=new ArrayList<Bintree>();
		for(Object temp:obj) {
			datas.add(new Bintree(temp));
		}
		root=datas.get(0);
		for(int i=0;i<obj.length/2;i++) {
			datas.get(i).left=datas.get(2*i+1);
			if(2*i+2<datas.size())
				datas.get(i).right=datas.get(2*i+2);
		}
	}
	public void levelorder(Bintree root) {
		Queue<Bintree> queue=new LinkedList<>();
		ArrayList<Object> list=new ArrayList<>();
		int size=0;
		queue.offer(root);
		while(true) {
			size=queue.size();
			if(size==0)
				break;
			else {
				Bintree node=queue.poll();
				list.add(node.data);
				if(node.left!=null) {
					queue.offer(node.left);
				}
				if(node.right!=null) {
					queue.offer(node.right);
				}
			}	
		}
		for(Iterator iter=list.iterator();iter.hasNext();)
			System.out.print(iter.next()+" ");
	}
	public static void main(String[] args) {
		Bintree bintree=new Bintree();
		int values[] = {80099, 16114, 63108, 25032, 31044, 59069, 39099, 13110, 34101, 66120,19116, 72105, 70045, 38032, 41110, 12105, 75110, 27105, 1105, 9114,67117, 20101, 21100, 11032, 79046, 32112, 5111, 6117, 45116, 22032,61097, 65120, 49110, 15101, 82109, 50103, 54110, 17101, 46032, 4121, 
				76097, 7032, 57105, 2102, 58044, 8097, 44099, 73064, 81111, 43097,30112, 14116, 60109, 74104, 77105, 35097, 64058, 29112, 55032, 33108,71108, 40111, 47088, 52117, 56076, 68097, 37101, 78114, 24110, 53097,69110, 48105, 18115, 26072, 3032, 42116, 62105, 51120, 28065, 10101,23105, 36115};
		//System.out.println(values.length);
		Integer[] value=new Integer[82];
		int j=0;
		TreeSet<Integer> set=new TreeSet<>();
		for(int temp:values) {
			set.add(temp);
		}
		for(Iterator iter=set.iterator();iter.hasNext();) {
			value[j++]=(Integer) iter.next();
		}	
		bintree.creat(value);
		bintree.levelorder(bintree.root);
	}
}

运行结果如下:

1105 2102 3032 4121 5111 6117 7032 8097 9114 10101 11032 12105 13110 14116 15101 16114 17101 18115 19116 20101 21100 22032 23105 24110 25032 26072 27105 28065 29112 30112 31044 32112 33108 34101 35097 36115 37101 38032 39099 40111 41110 42116 43097 44099 45116 46032 47088 48105 49110 50103 51120 52117 53097 54110 55032 56076 57105 58044 59069 60109 61097 62105 63108 64058 65120 66120 67117 68097 69110 70045 71108 72105 73064 74104 75110 76097 77105 78114 79046 80099 81111 82109

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值