在计算机科学中,二叉树是每个结点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用于实现二叉查找树和二叉堆。
package *;
import java.util.ArrayList;
import java.util.List;
/**
* @program: data-structure
* @description: 二叉树
* @author: ChenWenLong
* @create: 2019-09-10 13:48
**/
public class MyBinaryTree<T> {
//左节点
public MyBinaryTree<T> left;
//右节点
public MyBinaryTree<T> right;
//节点
public MyBinaryTree<T> root;
//数据域
private T data;
//节点数组
public List<MyBinaryTree<T>> datas;
/**
* 功能描述:
* 〈创建一个二叉树〉
*
* @params : [left, right, data]
* @return :
* @author : cwl
* @date : 2019/9/10 13:51
*/
public MyBinaryTree(MyBinaryTree left, MyBinaryTree right, T data){
this.left=left;
this.right=right;
this.data=data;
}
public MyBinaryTree() {
}
/**
* 功能描述:
* 〈纯数据的二叉树,它的左右节点为空〉
*
* @params : [data]
* @return :
* @author : cwl
* @date : 2019/9/10 13:52
*/
public MyBinaryTree(T data){
this(null,null,data);
}
/**
* 功能描述:
* 〈根据数组数据创建一个二叉树〉
*
* @params : [objs]
* @return : void
* @author : cwl
* @date : 2019/9/10 13:54
*/
public void creat(T[] objs){
datas=new ArrayList<MyBinaryTree<T>>();
//将一个数组的值依次转换为Node节点
for(T o:objs){
datas.add(new MyBinaryTree(o));
}
//将数组的第一个元素存储为根节点
root=datas.get(0);
//创建二叉树,循环次数最多只有总长度的一半
for (int i = 0;i<objs.length/2; i++) {
//取得奇数位为左节点
datas.get(i).left=datas.get(i*2+1);
//偶数位为右节点
if(i*2+2<datas.size()){//避免偶数的时候 下标越界
datas.get(i).right=datas.get(i*2+2);
}
}
}
/**
* 功能描述:
* 〈从节点root开始,前序遍历〉
*
* @params : [root]
* @return : void
* @author : cwl
* @date : 2019/9/10 13:57
*/
public void preorder(MyBinaryTree<T> root){
if(root!=null){
System.out.println(root.data);
preorder(root.left);
preorder(root.right);
}
}
/**
* 功能描述:
* 〈从节点root开始,中序遍历〉
*
* @params : [root]
* @return : void
* @author : cwl
* @date : 2019/9/10 13:58
*/
public void inorder(MyBinaryTree<T> root){
if(root!=null){
inorder(root.left);
System.out.println(root.data);
inorder(root.right);
}
}
/**
* 功能描述:
* 〈从节点root开始,后序遍历〉
*
* @params : [root]
* @return : void
* @author : cwl
* @date : 2019/9/10 13:58
*/
public void afterorder(MyBinaryTree<T> root){
if(root!=null){
System.out.println(root.data);
afterorder(root.left);
afterorder(root.right);
}
}
}