package com.tree;
public class BinaryTree {
private int data;//数据节点
private BinaryTree left;
private BinaryTree right;
public BinaryTree(int data){
this.data = data;
this.left = null;
this.right = null;
}
/*
* 创建二叉树,返回根节点
* @param input
* @return
*/
public static BinaryTree createTree(int[] input){
BinaryTree root = null;
BinaryTree temp = null;
for(int i = 0; i < input.length;i++){
//创建根节点
if(root == null){
root = temp = new BinaryTree(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 BinaryTree(input[i]);
}
}else{
if(temp.right != null){
temp = temp.right;
}else{
temp.right = new BinaryTree(input[i]);
}
}
}
}
}
return root;
}
/*
* 前序遍历
* @param tree
*/
public static void preOrder(BinaryTree tree){
if(tree != null){
System.out.println(tree.data);
preOrder(tree.left);
preOrder(tree.right);
}
}
/*
* 中序遍历
* @param tree
*/
public static void midOrder(BinaryTree tree){
if(tree != null){
midOrder(tree.left);
System.out.println(tree.data);
midOrder(tree.right);
}
}
/*
* 后序遍历
* @param tree
*/
public static void posOrder(BinaryTree tree){
if(tree != null){
posOrder(tree.left);
posOrder(tree.right);
System.out.println(tree.data);
}
}
/*
* 求二叉树的深度
*
* @param tree
*/
public static int length(BinaryTree tree){
int leftLen;
int rightLen;
if(tree == null){
return 0;
}else{
leftLen = length(tree.left);
rightLen = length(tree.right);
if(leftLen > rightLen){
return leftLen+1;
}else{
return rightLen+1;
}
}
}
/*
* 测试main函数
*
* @param args
*/
public static void main(String[] args){
int[] input = {4,2,6,1,3,5,7,8,10};
BinaryTree btree = createTree(input);
System.out.println("前序遍历:");
preOrder(btree);
System.out.println("中序遍历:");
midOrder(btree);
System.out.println("后序遍历:");
posOrder(btree);
System.out.println("树的深度:"+length(btree));
}
}
二叉树的java实现与几种遍历
最新推荐文章于 2025-06-17 00:15:00 发布
