给定一个排序数组,如何构造一个二叉排序树

package com.two;
//给定一个排序数组,如何构造一个二叉排序树 递归
import java.util.LinkedList;

public class CreateBSTfromSortedArray {
	public static void main(String[] args) {
		int[] data = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
		CreateBSTfromSortedArray bst = new CreateBSTfromSortedArray();
		Node root = bst.createBST(data);
		bst.inOrder(root);
		System.out.println();
		bst.levelOrder(root);
	}
	private static class Node{
		int data;
		Node left;
		Node right;
		Node(int data){
			this.data=data;
		}
	}
	public static void inOrder(Node node){
		if(node == null){
			return ;
		}
		inOrder(node.left);
		System.out.print(node.data+" ");
		inOrder(node.right);
	}
	public static void levelOrder(Node node){
		if(node == null){
			return;
		}
		LinkedList<Node> queue = new LinkedList<Node>();
		queue.addLast(node);
		while(!queue.isEmpty()){
			Node curNode = queue.removeFirst();
			System.out.print(curNode.data+" ");
			if(curNode.left!=null){
				queue.addLast(curNode.left);
			}
			if(curNode.right!=null){
				queue.addLast(curNode.right);
			}
		}
	}
	public Node[] createNode(int[] data){
		int len = data.length;
		Node[] nodes = new Node[len];
		for(int i = 0 ; i < len;i++){
			nodes[i]=new Node(data[i]);
		}
		return nodes;
	}
	public Node createBSTHelp(Node[] nodes, int start, int end) {
		if(start>end){
			return null;
		}
		int mid = start+(end-start)/2;
		if(start == end){
			return nodes[mid];
		}
		Node root = nodes[mid];
		root.left = createBSTHelp(nodes,start,mid-1);
		root.right=createBSTHelp(nodes,mid+1,end);
		return root;
	}
	public Node createBST(int[] data) {
		if(data==null||data.length==0){
			return null;
		}
		Node[] nodes = createNode(data);
		return createBSTHelp(nodes,0,data.length-1);
	}
}
转:http://bylijinnan.iteye.com/blog/1484183
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值