java 二叉树的构建 先序、中序、后序遍历

 
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);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值