package com.ydlclass.tree;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Stack;
import java.util.concurrent.ArrayBlockingQueue;
public class BST {
//二叉排序树
public static class Node{
Integer data;
Node left;
Node right;
public Node(Integer data) {
this.data = data;
}
}
//递归实现树的遍历
public static void recursive(Node node){
if (node == null){
return;
}
recursive(node.left);
recursive(node.right);
}
//递归实现前序遍历
public static void preOrder(Node node){
if (node == null){
return;
}
System.out.println(node.data);
preOrder(node.left);
preOrder(node.right);
}
//递归实现中序遍历
public static void midOrder(Node node){
if(node == null){
return;
}
midOrder(node.left);
System.out.println(node.data);
midOrder(node.right);
}
//递归实现后序遍历
public static void postOrder(Node node){
if (node == null){
return;
}
postOrder(node.left);
postOrder(node.right);
System.out.println(node.data);
}
//使用栈实现前序遍历
public static void stackImplement(Node node){
Stack<Node> stack = new Stack<>();
stack.push(node);
while(!stack.isEmpty()){
node = stack.pop();
System.out.println(node.data);
if(node.right != null){
stack.push(node.right);
}
if (node.left != null){
stack.push(node.left);
}
}
}
//使用队列实现层级遍历;
public static void linkImplement(Node node){
LinkedList<Node> link = new LinkedList<>();
link.addFirst(node);
while (!link.isEmpty()){
node = link.removeLast();
System.out.println(node.data);
if (node.left != null){
link.addFirst(node.left);
}
if (node.right != null){
link.addFirst(node.right);
}
}
}
public static void main(String[] args) {
Node root = new Node(3);
root.left = new Node(5);
root.right = new Node(7);
root.left.left = new Node(1);
root.left.right = new Node(12);
root.right.left = new Node(8);
root.right.right = new Node(9);
preOrder(root);
System.out.println("___");
midOrder(root);
System.out.println("___");
postOrder(root);
System.out.println("___");
linkImplement(root);
System.out.println("___");
}
}
