package com.yym.leetcode;
import java.util.ArrayList;
import java.util.List;
public class BinTreeTraverse {
public int[] vals = {1,2,3,4,5,6,7,8,9};
public static List<Node> listNode = new ArrayList<Node>();
class Node{
Node left;
Node right;
int val = 0;
Node(int val){
this.val = val;
this.left = null;
this.right = null;
}
}
public void creatBinTree(){
for(int i = 0;i<vals.length;i++){
listNode.add(new Node(vals[i]));
}
for(int i = 0;i<vals.length/2-1;i++){
listNode.get(i).left = listNode.get(i*2+1);
listNode.get(i).right = listNode.get(i*2+2);
}
int lastParentIndex = vals.length/2-1;
listNode.get(lastParentIndex).left = listNode.get(lastParentIndex*2+1);
if(vals.length%2 == 1) listNode.get(lastParentIndex).right = listNode.get(lastParentIndex*2+2);
}
public void preOderTravers(Node root){
if(root == null) return;
System.out.print(root.val+" ");
preOderTravers(root.left);
preOderTravers(root.right);
}
public void minOrderTravers(Node root){
if(root == null) return ;
minOrderTravers(root.left);
System.out.print(root.val+" ");
minOrderTravers(root.right);
}
public void postOrderTravers(Node root){
if(root == null) return ;
postOrderTravers(root.left);
postOrderTravers(root.right);
System.out.print(root.val+" ");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
BinTreeTraverse t = new BinTreeTraverse();
t.creatBinTree();
Node root = listNode.get(0);
t.preOderTravers(root);
System.out.println(" ");
t.minOrderTravers(root);
System.out.println(" ");
t.postOrderTravers(root);
}
}
利用递归求构建的最小二叉树的高度
import java.util.*;
public class MinimalBST {
public int buildMinimalBST(int[] vals) {
// write code here
if(vals.length ==0 || vals == null) return 0;
return build(vals,0,vals.length-1);
}
public int build(int[] vals, int start, int end){
if(start >= end) return 1; //奇数==、偶数>=
int mid = (start+end)/2;
int h1 = build(vals,start,mid-1)+1;
int h2 = build(vals,mid+1,end)+1;
return Math.max(h1,h2);
}
}