二叉树问题

来源:互联网 发布:淘宝网睡衣套装 编辑:程序博客网 时间:2024/05/17 01:35

定义二叉树

    static  class treeNode{        public int value;        public treeNode left;        public  treeNode right;        public  treeNode(int value){            this.value=value;        }    }
  1. 打印二叉树
    /**     * 递归:先序遍历二叉树(根左右),中序(左根右)类似,后序(左右根)     * @param head     */    public void preOrder(treeNode head){        if(head!=null){            System.out.println(head.value);            preOrder(head.left);            preOrder(head.right);        }    }        /**     * 非递归打印前序遍历(根左右)     * 1.定义栈。2.根节点出栈,如果右节点不为空进栈,左节点不为空进栈。(原因:栈先进后出)     * @param head     */    public void preOrder2(treeNode head){        if(head!=null){            Stack<treeNode> 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);                }            }        }    }        /**     *中序非递归(左根右)     * @param head     */    public void inOrder(treeNode head){        if(head!=null){            Stack<treeNode> 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;                }            }        }    }        /**     * 后序遍历     * @param head     */    public void posOreder(treeNode head){        if(head!=null){            Stack<treeNode> s1 = new Stack<>();            Stack<treeNode> 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);            }        }    }
原创粉丝点击