这里只是整理好了代码。
import java.util.Stack;
/**
* Created by ql on 2018/7/10.
*/
class node{
public int value;
public node left;
public node right;
public void node(int data){
this.value=data;
}
}
public class BinaryTree {
public void RpreOrder(node head){
//递归版
if(head==null)return;
System.out.println(head.value+"");
RpreOrder(head.left);
RpreOrder(head.right);
}
public void PreOrder(node head){
//非递归版
if (head==null) return ;
Stack<node> stack=new Stack<>();
stack.push(head);
while (!stack.isEmpty()){
head= stack.pop();
System.out.println(head.value+"");
stack.push(head.right);
stack.push(head.left);
}
}
public void RinOrder(node head){
if(head==null)return;
RinOrder(head.left);
System.out.println(head.value+"");
RinOrder(head.right);
}
public void InOrder(node head){
if (head==null) return ;
Stack<node> stack=new Stack<>();
while (!stack.isEmpty()||head!=null){
if (head!=null) {//如果stack是空的情况下,head一定是非空的
stack.push(head);
head = head.left;//这时候一直改变head的值,知道head指向左子树的最左边的节点
}else{//这时候head指向了左子树的最左边的节点,我们需要弹出栈,然后回到上一层
head= stack.pop();
System.out.println(head.value+"");
head=head.right;
}
}
}
public void RposOrder(node head){
if(head==null) return ;
RposOrder(head.left);
RposOrder(head.right);
System.out.println(head.value+"");
}
public void PosOrder(node head){//后序遍历是比较麻烦的
if (head==null) return ;
Stack<node> s1=new Stack<>();
Stack<node> s2=new Stack<>();
s1.push(head);
while (!s1.isEmpty()) {
head = s1.pop();
s2.push(head);
if (head.left != null) {
s1.push(head.left);
}
if (head.right != null) {
s1.push(head.right);
}
}
while (!s2.isEmpty()){
System.out.println(s2.pop().value+"");
}
}
}