面试:递归和非递归方式实现先序、中序、后序遍历代码

来源:互联网 发布:万国数据官网 编辑:程序博客网 时间:2024/06/05 02:30
public class TreeTraversal {    public void preOrderRecur(Node head) {        if (head == null) {            return;        }        System.out.println(head.value + "");        preOrderRecur(head.left);        preOrderRecur(head.right);    }    public void inOrderRecur(Node head) {        if (head == null) {            return;        }        inOrderRecur(head.left);        System.out.println(head.value + " ");        inOrderRecur(head.right);    }    public void posOrderRecur(Node head) {        if (head == null) {            return;        }        posOrderRecur(head.left);        posOrderRecur(head.right);        System.out.println(head.value + " ");    }    public void preOrderUnRecur(Node head) {        System.out.println("pre-order");        if (head != null) {            Stack<Node> stack = new Stack<>();            stack.add(head);            while (!stack.isEmpty()) {                head = stack.pop();                System.out.println(head.value + " ");                if (head.right != null) {                    stack.push(head.right);                }                if (head.left != null) {                    stack.push(head.left);                }            }        }    }    public void inOrderUnRecur(Node head) {        System.out.println("in-order:");        if (head != null) {            Stack<Node> stack = new Stack<>();            while (!stack.isEmpty() || head != null) {                if (head != null) {                    stack.push(head);                    head = head.left;                } else {                    head = stack.pop();                    System.out.println(head.value + " ");                    head = head.right;                }            }        }    }    public void posOrderUnRecur1(Node head) {        System.out.println("pre-order:");        if (head != null) {            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 + " ");            }        }    }    /**     * 第二种方法     * @param h     */    public void posOrderUnRecur2(Node h) {        System.out.println("pos-order: ");        if (h != null) {            Stack<Node> stack = new Stack<>();            stack.push(h);            Node c = null;            while (!stack.isEmpty()) {                c = stack.peek();            }        }    }    class Node {        public int value;        public Node left;        public Node right;        public Node(int data) {            this.value = data;        }    }}
0 0
原创粉丝点击