递归和非递归的方式实现二叉树的先序、中序和后序遍历

来源:互联网 发布:网面白鞋怎么清洗知乎 编辑:程序博客网 时间:2024/05/16 15:00
import java.util.Stack;/** * Created by lxw, liwei4939@126.com on 2017/10/30. *  */public class PreOrder_InOrder_PosOrder {    public class Node{        public int value;        public Node left;        public Node right;        public Node(int data){            this.value = data;        }    }        public void PreOrderRecur(Node head){        if(head == null){            return;        }        System.out.print(head.value + " ");        PreOrderRecur(head.left);        PreOrderRecur(head.right);    }        public void InOrderRecur(Node head){        if(head == null){            return;        }        InOrderRecur(head.left);        System.out.print(head.value + " ");        InOrderRecur(head.right);    }        public void PosOrderRecur(Node head){        if(head == null){            return;        }        PosOrderRecur(head.left);        PosOrderRecur(head.right);        System.out.print(head.value + " ");    }        public void PreOrderUnRecur(Node head){        if(head == null){            return;        }        Stack<Node> stack = new Stack<Node>();        stack.push(head);        while (!stack.isEmpty()){            head = stack.pop();            System.out.print(head.value + " ");            if(head.right != null){                stack.push(head.right);            }            if(head.left != null){                stack.push(head.left);            }        }        System.out.println();    }        public void InOrderUnRecur(Node head){        if(head == null){            return;        }        Stack<Node> stack = new Stack<Node>();        while (!stack.isEmpty() || head != null){            if(head != null){                stack.push(head);                head = head.left;            } else {                head = stack.pop();                System.out.print(head.value + " ");                head = head.right;            }        }        System.out.println();    }        public PosOrderUnRecur(Node head){        if(head == null){            return;        }        Stack<Node> stack1 = new Stack<Node>();        Stack<Node> stack2 = new Stack<Node>();        stack1.push(head);        while (!stack1.isEmpty()){            head = stack1.pop();            stack2.push(head);            if(head.left != null){                stack1.push(head.left);            }            if(head.right != null){                stack1.push(head.right);            }        }        while (!stack2.isEmpty()){            System.out.print(stack2.pop().value + " ");        }        System.out.println();    }        }

阅读全文
0 0
原创粉丝点击