import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;
class TreeNode{
TreeNode left;
TreeNode right;
int val;
TreeNode(int val){
this.val=val;
}
}
public class TreeList {
public static void main(String []args){
TreeNode n1=new TreeNode(1);
TreeNode n2=new TreeNode(2);
TreeNode n3=new TreeNode(3);
TreeNode n4=new TreeNode(4);
TreeNode n5=new TreeNode(5);
TreeNode n6=new TreeNode(6);
TreeNode n7=new TreeNode(7);
TreeNode n8=new TreeNode(8);
TreeNode n9=new TreeNode(9);
n1.left=n2;
n1.right=n3;
n2.left=n4;
n2.right=n5;
n3.left=n6;
n5.left=n7;
n5.right=n8;
n6.right=n9;
System.out.print("前序遍历:");
printList(preOrder(n1));
System.out.print("中序遍历:");
printList(inOrder(n1));
System.out.print("后序遍历:");
printList(afterOrder(n1));
System.out.print("层次遍历:");
printList(PrintFromTopToBottom(n1));
}
public static void printList(ArrayList<Integer> list){
for(int i:list){
System.out.print(i+" ");
}
System.out.println();
}
public static ArrayList<Integer> preOrder(TreeNode root){//先序遍历
Stack<TreeNode> s=new Stack<TreeNode>();
ArrayList<Integer> list=new ArrayList<Integer>();
TreeNode currentNode=root;
while(currentNode!=null||!s.isEmpty()){
if(currentNode!=null){
list.add(currentNode.val);
s.push(currentNode);
currentNode=currentNode.left;
}else{
currentNode=s.pop();
currentNode=currentNode.right;
}
}
return list;
}
public static ArrayList<Integer> inOrder(TreeNode root){//中序遍历
Stack<TreeNode> s=new Stack<TreeNode>();
ArrayList<Integer> list=new ArrayList<Integer>();
TreeNode currentNode=root;
while(currentNode!=null||!s.isEmpty()){
if(currentNode!=null){
s.push(currentNode);
currentNode=currentNode.left;
}
else{
currentNode=s.pop();
list.add(currentNode.val);
currentNode=currentNode.right;
}
}
return list;
}
public static ArrayList<Integer> afterOrder(TreeNode root){//后续遍历
Stack<TreeNode> s=new Stack<TreeNode>();
Stack<TreeNode> temp=new Stack<TreeNode>();
ArrayList<Integer> list=new ArrayList<Integer>();
TreeNode currentNode=root;
while(currentNode!=null||!s.isEmpty()){
if(currentNode!=null){
temp.push(currentNode);
s.push(currentNode);
currentNode=currentNode.right;
}else{
currentNode=s.pop();
currentNode=currentNode.left;
}
}
while(!temp.isEmpty()){
list.add(temp.pop().val);
}
return list;
}
public static ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {//层次遍历
ArrayList<Integer> result=new ArrayList<Integer>();
if(root==null)return result;
else{
Queue<TreeNode> q=new LinkedList<TreeNode>();
q.add(root);
TreeNode tempNode;
while(!q.isEmpty()){
tempNode=q.remove();
result.add(tempNode.val);
if(tempNode.left!=null)q.add(tempNode.left);
if(tempNode.right!=null)q.add(tempNode.right);
}
}
return result;
}
}