package Tree;
import java.util.ArrayList;
import java.util.List;
public class CreateBinaryTree {
private int[] arr = {1,2,3,4,5,6,7,8,9};
private static List<Node> listnode;
static class Node{
Node left;
Node right;
int data;
public Node(int data) {
left = null;
right = null;
this.data = data;
}
}
/* 利用层序遍历构造二叉树 */
public void createTree() {
listnode = new ArrayList<Node>();
//将一个数组转换为节点
for(int i=0;i<arr.length;i++) {
listnode.add(new Node(arr[i]));
}
//按照层序遍历方式对二叉树进行构建,先对【0-arr.length/2-1)个节点构造子节点,构造完之后再对第arr.length/2-1个节点判断有几个子节点
for(int i=0;i<arr.length/2-1;i++) {
listnode.get(i).left = listnode.get(i*2+1);
listnode.get(i).right = listnode.get(i*2+2);
}
//确保左节点
listnode.get(arr.length/2-1).left = listnode.get((arr.length/2-1)*2+1);
//当第arr.length/2-1还有右节点时
if(arr.length%2==1) {
listnode.get(arr.length/2-1).left = listnode.get((arr.length/2-1)*2+2);
}
}
/* 前序遍历二叉树 */
public void preOrder(Node node) {
if(node==null)
return;
System.out.print(node.data+"\t");
preOrder(node.left);
preOrder(node.right);
}
/* 中序遍历二叉树 */
public void inOrder(Node node) {
if(node==null)
return;
preOrder(node.left);
System.out.print(node.data+"\t");
preOrder(node.right);
}
/* 后序遍历二叉树 */
public void postOrder(Node node) {
if(node==null)
return;
preOrder(node.left);
preOrder(node.right);
System.out.print(node.data+"\t");
}
public static void main(String args[]) {
CreateBinaryTree cbt = new CreateBinaryTree();
cbt.createTree();
cbt.preOrder(listnode.get(0));
System.out.println("中序遍历");
cbt.inOrder(listnode.get(0));
System.out.println("后序遍历");
cbt.postOrder(listnode.get(0));
}
}