1.高度最小的BST
题目描述
对于一个元素各不相同且按升序排列的有序序列,请编写一个算法,创建一棵高度最小的二叉查找树。
给定一个有序序列int[] vals,请返回创建的二叉查找树的高度。
import java.util.*;
public class MinimalBST {
public int buildMinimalBST(int[] vals) {
if(vals==null||vals.length==0) return 0;
return getHigh(vals,0,vals.length-1);
}
public int getHigh(int []vals,int start,int end){
if(start>end) return 0;
int mid=(start+end)/2;
int lf=getHigh(vals,start,mid-1);
int lr=getHigh(vals,mid+1,end);
return lf>lr?lf+1:lr+1;
}
}
2.输出单层结点
图的宽度优先遍历(BFS),用队列来实现
import java.util.*;
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}*/
public class TreeLevel {
public ListNode getTreeLevel(TreeNode root, int dep) {
Queue<TreeNode> queue=new LinkedList<TreeNode>();
ListNode head=new ListNode(-1);
ListNode node=head;
queue.offer(root);
while(!queue.isEmpty()&&dep!=1){
int size=queue.size();
for(int i=0;i<size;i++){
TreeNode temp=queue.poll();
if(temp.left!=null){
queue.offer(temp.left);
}
if(temp.right!=null){
queue.offer(temp.right);
}
}
dep--;
}
while(!queue.isEmpty()){
node.next=new ListNode(queue.poll().val);
node=node.next;
}
return head.next;
}
}
下面这个和上面的这个差不多,基本没多大区别
import java.util.*;
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}*/
public class TreeLevel {
public ListNode getTreeLevel(TreeNode root, int dep) {
Queue<TreeNode> queue=new LinkedList<TreeNode>();
ListNode head=new ListNode(-1);
ListNode node=head;
queue.offer(root);
while(!queue.isEmpty()&&dep!=0){
int length=queue.size();
for (int i = 0; i < length; i++) {
TreeNode tn=queue.poll();
if(tn.left!=null)
queue.offer(tn.left);
if(tn.right!=null)
queue.offer(tn.right);
if(dep==1){
node.next=new ListNode(tn.val);
node=node.next;
}
}
dep--;
}
return head.next;
}
}