public class Tree {
private int data; /* 数据节点 */
private Tree left; /* 左子树 */
private Tree right; /* 右子树 */
public Tree( int data )
{
this.data = data;
this.left = null;
this.right = null;
}
/**
* 创建二叉树,返回根结点
*/
public static Tree createTree( int[] input )
{
Tree root = null;
Tree temp = null;
for ( int i = 0; i < input.length; i++ )
{
/* 创建根节点 */
if ( root == null )
{
root = temp = new Tree( input[i] );
} else {
/* 回到根结点 */
temp = root;
/* 添加节点 */
while ( temp.data != input[i] )
{
if ( input[i] <= temp.data )
{
if ( temp.left != null )
{
temp = temp.left;
} else {
temp.left = new Tree( input[i] );
}
} else {
if ( temp.right != null )
{
temp = temp.right;
} else {
temp.right = new Tree( input[i] );
}
}
}
}
}
return(root);
}
/**
* 前序遍历
*/
public static void preOrder( Tree tree )
{
if ( tree != null )
{
System.out.print( tree.data + “ ” );
preOrder( tree.left );
preOrder( tree.right );
}
}
/**
* 中序遍历
*/
public static void midOrder( Tree tree )
{
if ( tree != null )
{
midOrder( tree.left );
System.out.print( tree.data + “ ” );
midOrder( tree.right );
}
}
/**
* 后序遍历
*/
public static void posOrder( Tree tree )
{
if ( tree != null )
{
posOrder( tree.left );
posOrder( tree.right );
System.out.print( tree.data + “ ” );
}
}
/**
* 求二叉树的深度
*/
public static int length( Tree tree )
{
int depth1;
int depth2;
if ( tree == null )
return(0);
/* 左子树的深度 */
depth1 = length( tree.left );
/* 右子树的深度 */
depth2 = length( tree.right );
if ( depth1 > depth2 )
return(depth1 + 1);
else
return(depth2 + 1);
}
public static void main( String[] args )
{
int[] input = { 4, 2, 6, 1, 3, 5, 7, 8, 10 };
Tree tree = createTree( input );
System.out.print( “ 前序遍历 : “ );
preOrder( tree );
System.out.print( “ \ n 中 序遍历 : “ );
midOrder( tree );
System.out.print( “ \ n 后 序遍历 : “ );
posOrder( tree );
}
}