二叉树遍历总结

这里只是整理好了代码。

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+"");
        }
    }
}


猜你喜欢

转载自blog.csdn.net/q_all_is_well/article/details/80989006