package java程序员面试笔试宝典;
import java.util.LinkedList;
import java.util.Queue;
class TreeNode{
public int data;
public TreeNode left;
public TreeNode right;
public TreeNode(int data){
this.data=data;
this.left=null;
this.right=null;
}
}
public class BinaryTree {
private TreeNode root;
public BinaryTree(){
this.root=null;
}
//将数据插入到二叉排序树
public void insert(int data){
TreeNode newNode=new TreeNode(data);
if(root==null){
root=newNode;
}else{
TreeNode current=root;
while(true){
if(data<current.data){
if(current.left==null){
current.left=newNode;
return ;
}
current=current.left;
}else {
if(current.right==null){
current.right=newNode;
return ;
}
current=current.right;
}
}
}
}
//输入数组构建二叉树
public void buildTree(int[] a){
for (int i = 0; i < a.length; i++) {
insert(a[i]);
}
}
//中序遍历
public void inOrder(TreeNode localRoot){
if(localRoot!=null){
inOrder(localRoot.left);
System.out.print(localRoot.data+" ");
inOrder(localRoot.right);
}
}
public void inOrder(){
inOrder(this.root);
}
//前序遍历
public void preOrder(TreeNode localRoot){
if(localRoot!=null){
System.out.print(localRoot.data+" ");
preOrder(localRoot.left);
preOrder(localRoot.right);
}
}
public void preOrder(){
preOrder(this.root);
}
//后序遍历
public void postOrder(TreeNode localRoot){
if(localRoot!=null){
postOrder(localRoot.left);
postOrder(localRoot.right);
System.out.print(localRoot.data+" ");
}
}
public void postOrder(){
postOrder(this.root);
}
//层次遍历
public void layerTranverse(){
if(this.root==null){
return ;
}
Queue<TreeNode> q=new LinkedList<TreeNode>();
q.add(this.root);
TreeNode current;
//System.out.println(q.poll().data);
///*
while(!q.isEmpty()){
current=q.poll();
if(current!=null){
System.out.print(current.data+" ");
if(current.left!=null){
q.add(current.left);
}
if(current.right!=null){
q.add(current.right);
}
}
}
//*/
}
public static void main(String[] args) {
BinaryTree biTree=new BinaryTree();
int[] a={2,8,7,4,9,3,1,6,7,5};
biTree.buildTree(a);
System.out.println("中序遍历:");
biTree.inOrder();
System.out.println();
System.out.println("前序遍历:");
biTree.preOrder();
System.out.println();
System.out.println("后续遍历:");
biTree.postOrder();
System.out.println();
System.out.println("层次遍历:");
biTree.layerTranverse();
System.out.println();
}
}