- java实现二叉树
- 二叉排序树
- 二叉树的前序遍历、中序遍历、后序遍历和层序遍历
class Node {
Node left;
Node right;
int data;
public Node(int data) {
this.data = data;
this.left = null;
this.right = null;
}
}
import java.util.LinkedList;
import java.util.Queue;
public class BinaryTree {
Node root = null;//根结点的引用
//二叉排序树
public void insert(int data) {
Node newNode = new Node(data);
if(root == null) {
root = newNode;
return;
}
Node current = root;
Node parent = null;
while(true) {
parent = current;
if(data < current.data) {
current = current.left;
if(current == null) {
parent.left = newNode;
return;
}
}else {
current = current.right;
if(current == null) {
parent.right = newNode;
return;
}
}
}
}
//构建二叉树
public void bulidTree(int[] data) {
for(int i = 0;i < data.length;i++) {
insert(data[i]);
}
}
//中序遍历:左-根-右
public void inOrder(Node localRoot) {
if(localRoot != null) {
inOrder(localRoot.left);
System.out.print(localRoot.data+" ");
inOrder(localRoot.right);
}
}
public void inOrder() {
this.inOrder(this.root);
}
//先序遍历:根-左-右
public void preOrder(Node localRoot) {
if(localRoot != null) {
System.out.print(localRoot.data+" ");
preOrder(localRoot.left);
preOrder(localRoot.right);
}
}
public void preOrder() {
this.preOrder(this.root);
}
//后序遍历:左-右-根
public void postOrder(Node localRoot) {
if(localRoot != null) {
postOrder(localRoot.left);
postOrder(localRoot.right);
System.out.print(localRoot.data+" ");
}
}
// public void postOrder() {
// this.postOrder(this.root);
// }
//层序遍历
public void layerTranverse() {
if(this.root == null) {
return;
}
Queue<Node> q = new LinkedList<Node>();
q.add(this.root);
while(!q.isEmpty()) {
Node n = q.poll();//队列先出后进,队列的方法:(remove)poll出头
System.out.print(n.data+" ");
if(n.left != null) {
q.add(n.left);
}
if(n.right != null) {
q.add(n.right);
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
BinaryTree biTree = new BinaryTree();
int[] data = {2,8,7,4,9,3,1,6,7,5};
biTree.bulidTree(data);
System.out.println("inorder:");
biTree.inOrder();
System.out.println("\n"+"preorder:");
biTree.preOrder();
System.out.println("\n"+"postorder:");
biTree.postOrder(biTree.root);
System.out.println("\n"+"layer:");
biTree.layerTranverse();
}
}